In giá trị của một biến trong SQL Developer


102

Tôi muốn in giá trị của một biến cụ thể bên trong một khối ẩn danh. Tôi đang sử dụng Oracle SQL Developer. Tôi đã thử sử dụng dbms_output.put_line. Nhưng nó không hoạt động. Mã mà tôi đang sử dụng được hiển thị bên dưới.

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;

Và tôi chỉ nhận được đầu ra là anonymous block completed.


đầu ra được xóa khi kết thúc / chấm dứt chương trình, đó là cách nó hoạt động. Bạn không thể tuôn ra để hiển thị trong khi chạy. Nhìn vào các bảng log (giao dịch độc lập) để xem những gì xảy ra khi một chương trình đang chạy
tbone

Tại sao không sử dụng trình gỡ lỗi tích hợp sẵn và bước qua khối của bạn. Nó hiển thị trạng thái của tất cả các biến.
Wolf

5
ĐẶT DÒNG MÁY CHỦ; --add Dấu chấm phẩy, chọn ALL và chạy trong nhà phát triển, đối với tôi tốt làm việc của nó,
Praveenkumar_V

Câu trả lời:


203

Bạn cần bật dbms_output. Trong Oracle SQL Developer:

  1. Hiển thị cửa sổ Đầu ra DBMS (Xem-> Đầu ra DBMS).
  2. Nhấn nút "+" ở đầu cửa sổ Dbms Output, sau đó chọn một kết nối cơ sở dữ liệu đang mở trong hộp thoại mở ra.

Trong SQL * Plus:

 SET SERVEROUTPUT ON

Trong phiên bản 1.5.5, tôi dường như không có tùy chọn đó trong Chế độ xem. Có Kết nối, Tệp, Báo cáo ... Thanh trạng thái, Thanh công cụ, Làm mới, nhưng không có Đầu ra DBMS. Rất nhiều thứ theo sở thích, nhưng tôi vẫn không thấy tùy chọn cho đầu ra.
ruffin

1
@ruffin: v1.5.5 đã 3 tuổi. Tôi đang sử dụng v3.0 và phiên bản hiện tại có vẻ là v3.1.
Klas Lindbäck

/ gật đầu Chúng tôi đang mắc kẹt trên 1.5.5 - nếu bạn có câu trả lời hữu ích, tôi sẽ chấp nhận nó, nhưng ngược lại. Cảm ơn!
ruffin

Tôi đặt tùy chọn "SET SERVEROUTPUT ON" trên dòng đầu tiên của tệp sql.
Samih A

Cảm ơn bạn rất nhiều!
Amazigh.Ca

18

Nhà phát triển SQL dường như chỉ xuất văn bản DBMS_OUTPUT khi bạn đã bật ngăn cửa sổ DBMS_OUTPUT một cách rõ ràng.

Đi tới (Menu) XEM -> Dbms_output để gọi ngăn.

Nhấp vào dấu Cộng màu xanh lá cây để bật đầu ra cho kết nối của bạn và sau đó chạy mã.

CHỈNH SỬA: Đừng quên đặt kích thước bộ đệm theo số lượng đầu ra bạn đang mong đợi.


6

Đặt đầu ra máy chủ trên Trước hết

  1. SET SERVEROUTPUT on sau đó

  2. Đi tới cửa sổ Đầu ra DBMS (Xem-> Đầu ra DBMS)

  3. sau đó Nhấn Ctrl+ Nđể kết nối máy chủ


3

Có 2 lựa chọn:

set serveroutput on format wrapped;

hoặc là

Mở menu 'xem' và nhấp vào 'đầu ra dbms'. Bạn sẽ nhận được một cửa sổ đầu ra dbms ở cuối trang tính. Sau đó, bạn cần thêm kết nối (vì một số lý do mà điều này không được thực hiện tự động).


1

1) Vào menu xem.
2) Chọn mục menu DBMS_OUTPUT.
3) Nhấn Ctrl+ Nvà chọn trình chỉnh sửa kết nối.
4) Thực hiện lệnh SET SERVEROUTPUT ON.
5) Sau đó thực thi Tập lệnh PL / SQL của bạn.

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây


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;

Tôi đã thêm Đóng con trỏ thứ hai. Nó hoạt động và nhận được đầu ra ...



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.