Mencetak nilai variabel di SQL Developer


102

Saya ingin mencetak nilai variabel tertentu yang ada di dalam blok anonim. Saya menggunakan Oracle SQL Developer. Saya mencoba menggunakan dbms_output.put_line. Tapi itu tidak berhasil. Kode yang saya gunakan ditunjukkan di bawah ini.

SET SERVEROUTPUT ON

DECLARE

  CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
  V_ALL_COLS VARCHAR2(500);

  CURSOR CURSOR_TABLE
    IS
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE'
    AND OBJECT_NAME LIKE 'tb_prm_%';

  CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
    IS
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLS
    WHERE TABLE_NAME = V_TABLE_NAME;

BEGIN

  OPEN CURSOR_TABLE;

  LOOP
    FETCH CURSOR_TABLE INTO CTABLE;
    EXIT WHEN CURSOR_TABLE%NOTFOUND;

    OPEN CURSOR_COLUMNS (CTABLE);

    V_ALL_COLS := NULL;

    LOOP
      FETCH CURSOR_COLUMNS INTO CCOLUMN;
      V_ALL_COLS := V_ALL_COLS || CCOLUMN;
      IF CURSOR_COLUMNS%FOUND THEN
        V_ALL_COLS := V_ALL_COLS || ', ';
      ELSE
        EXIT;
      END IF;
    END LOOP;

    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);

  END LOOP;
  CLOSE CURSOR_TABLE;

END;

Dan saya mendapatkan hasil hanya sebagai anonymous block completed.


output dibilas di akhir / penghentian program, begitulah cara kerjanya. Anda tidak dapat memerah untuk ditampilkan saat berlari. Lihatlah ke dalam tabel log (transaksi otonom) untuk melihat apa yang terjadi saat sebuah program berjalan
tbone

Mengapa tidak menggunakan debugger bawaan dan melangkah melalui blok Anda. Ini menunjukkan status semua variabel.
Serigala

5
ATUR SERVEROUTPUT ON; --tambahkan titik koma, pilih SEMUA dan jalankan di pengembang, bagi saya ini berfungsi dengan baik,
Praveenkumar_V

Jawaban:


203

Anda perlu mengaktifkan dbms_output. Di Oracle SQL Developer:

  1. Tampilkan jendela Output DBMS (View-> DBMS Output).
  2. Tekan tombol "+" di bagian atas jendela Keluaran Dbms lalu pilih koneksi database yang terbuka di dialog yang terbuka.

Di SQL * Plus:

 SET SERVEROUTPUT ON

Di versi 1.5.5, saya sepertinya tidak memiliki opsi itu di bawah Tampilan. Ada Koneksi, File, Laporan ... Status Bar, Toolbar, Refresh, tetapi tidak ada Output DBMS. Banyak hal di bawah preferensi, tetapi saya masih tidak melihat opsi untuk keluaran.
ruffin

1
@ruffin: v1.5.5 berusia 3 tahun. Saya menggunakan v3.0, dan versi saat ini tampaknya v3.1.
Klas Lindbäck

/ mengangguk Kami terjebak di 1.5.5 - jika Anda memiliki jawabannya, saya akan menerimanya, tetapi tidak. Terima kasih!
ruffin

Saya mengatur opsi "SET SERVEROUTPUT ON" pada baris pertama file sql.
Samih A

Terima kasih banyak!
Amazigh.Ca

18

Pengembang SQL tampaknya hanya mengeluarkan teks DBMS_OUTPUT ketika Anda secara eksplisit mengaktifkan panel jendela DBMS_OUTPUT.

Masuk ke (Menu) VIEW -> Dbms_output untuk memanggil panel.

Klik pada tanda Green Plus untuk mengaktifkan keluaran untuk koneksi Anda dan kemudian jalankan kodenya.

EDIT: Jangan lupa untuk mengatur ukuran buffer sesuai dengan jumlah output yang Anda harapkan.


6

Pertama-tama buat keluaran server

  1. SET SERVEROUTPUT on kemudian

  2. Pergi ke jendela Output DBMS (View-> DBMS Output)

  3. lalu Tekan Ctrl+ Nuntuk menghubungkan server


3

Ada 2 pilihan:

set serveroutput on format wrapped;

atau

Buka menu 'view' dan klik 'dbms output'. Anda harus mendapatkan jendela keluaran dbms di bagian bawah lembar kerja. Anda kemudian perlu menambahkan koneksi (karena alasan tertentu ini tidak dilakukan secara otomatis).


1

1) Buka menu tampilan.
2) Pilih item menu DBMS_OUTPUT.
3) Tekan Ctrl+ Ndan pilih editor koneksi.
4) Jalankan Perintah SET SERVEROUTPUT ON.
5) Kemudian jalankan PL / SQL Script Anda.

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini


0
DECLARE

  CTABLE USER_OBJECTS.OBJECT_NAME%TYPE;
  CCOLUMN ALL_TAB_COLS.COLUMN_NAME%TYPE;
  V_ALL_COLS VARCHAR2(5000);

  CURSOR CURSOR_TABLE
    IS
    SELECT OBJECT_NAME 
    FROM USER_OBJECTS 
    WHERE OBJECT_TYPE='TABLE'
    AND OBJECT_NAME LIKE 'STG%';

  CURSOR CURSOR_COLUMNS (V_TABLE_NAME IN VARCHAR2)
    IS
    SELECT COLUMN_NAME
    FROM ALL_TAB_COLS
    WHERE TABLE_NAME = V_TABLE_NAME;

BEGIN

  OPEN CURSOR_TABLE;
  LOOP
    FETCH CURSOR_TABLE INTO CTABLE;

    OPEN CURSOR_COLUMNS (CTABLE);
    V_ALL_COLS := NULL;
    LOOP

      FETCH CURSOR_COLUMNS INTO CCOLUMN;
      V_ALL_COLS := V_ALL_COLS || CCOLUMN;
      IF CURSOR_COLUMNS%FOUND THEN
        V_ALL_COLS := V_ALL_COLS || ', ';
      ELSE
        EXIT;
      END IF;
    END LOOP;
   close CURSOR_COLUMNS ;
    DBMS_OUTPUT.PUT_LINE(V_ALL_COLS);
    EXIT WHEN CURSOR_TABLE%NOTFOUND;
  END LOOP;`enter code here`
  CLOSE CURSOR_TABLE;

END;

Saya telah menambahkan Tutup kursor kedua. Ini berfungsi dan mendapatkan output juga ...



Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.