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.

988875
sumber
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
Klas Lindbäck
sumber
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.

Ollie
sumber
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

pengguna2497268
sumber
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).

devosJava.dll
sumber
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

Lova Chittumuri
sumber
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 ...

pengguna3098484
sumber
-1

pilih View -> DBMS Output di menu dan

Bhadra
sumber
-1

Buka jendela Output DBMS (View-> DBMS Output).

pengguna2001117
sumber