我是 Oracle/PL/SQL Developer 新手,我正在努力弄清楚如何查看此查詢的輸出:
DECLARE
ncount NUMBER;
vwhere VARCHAR2(1000) := '';
vselect VARCHAR2(1000) := ' select count(1) from ';
vsearchstr VARCHAR2(1000) := '1301 250 Sage Valley Road NW';
vline VARCHAR2(1000) := '';
istatus INTEGER;
BEGIN
DBMS_OUTPUT.ENABLE;
FOR k IN (SELECT a.table_name, a.column_name FROM user_tab_cols a WHERE a.data_type LIKE '%VARCHAR%')
LOOP
vwhere := ' where ' || k.column_name || ' = :vsearchstr ';
EXECUTE IMMEDIATE vselect || k.table_name || vwhere
INTO ncount
USING vsearchstr;
IF (ncount > 0)
THEN
dbms_output.put_line(k.column_name || ' ' || k.table_name);
ELSE
dbms_output.put_line('no output');
END IF;
END LOOP;
dbms_output.get_line(vline, istatus);
END;
我從
我知道資料庫中存在字串“1301 250 Sage Valley Road NW”,因此應該可以找到它。即使沒有,ELSE 塊也應該輸出“無輸出”。
據我了解, dbms_output.put_line() 將給定的字串添加到緩沖區,然后 dbms_output.get_line() 將其列印到輸出目標(無論設定為什么)。我知道需要啟用 dbms_output (因此 line DBMS_OUTPUT.ENABLE)并且 dbms_output.get_line() 只會在它所在的 BEGIN/END 塊完成后運行(我不知道這是否意味著它必須放在 BEGIN/END 之外塊,但我每次都無法避免某些錯誤)。
我已經閱讀了有關此問題的各種 stackoverflow 帖子,以及一些外部站點:
https://docs.oracle.com/cd/F49540_01/DOC/server.815/a68001/dbms_out.htm#1000449 https://www.tutorialspoint.com/plsql/plsql_dbms_output.htm
...但似乎沒有任何效果。
我怎樣才能看到輸出,或者如果上面的查詢有問題,你能告訴它是什么嗎?
謝謝。
uj5u.com熱心網友回復:
要DBMS_OUTPUT在 PL/SQL Developer 中啟用輸出,請參閱此答案。
我正在為
user_tab_cols資料庫中的所有模式尋找替代關鍵字
ALL_TAB_COLS當您沒有足夠的權限讀取表時使用并捕獲例外(并使用帶引號的識別符號來匹配用戶/表/列名稱的大小寫):
DECLARE
found_row PLS_INTEGER;
vsearchstr VARCHAR2(1000) := '1301 250 Sage Valley Road NW';
BEGIN
FOR k IN (SELECT owner,
table_name,
column_name
FROM all_tab_cols t
WHERE data_type LIKE '%VARCHAR%'
-- Ignore columns that are too small
AND data_length >= LENGTH(vsearchstr)
-- Ignore all oracle maintained tables
-- Not supported on earlier Oracle versions
AND NOT EXISTS (
SELECT 1
FROM all_users u
WHERE t.owner = u.username
AND u.oracle_maintained = 'Y'
)
)
LOOP
DECLARE
invalid_privileges EXCEPTION;
PRAGMA EXCEPTION_INIT(invalid_privileges, -1031);
BEGIN
EXECUTE IMMEDIATE 'SELECT 1 FROM "' || k.owner || '"."' || k.table_name || '" WHERE "' || k.column_name || '" = :1 AND ROWNUM = 1'
INTO found_row
USING vsearchstr;
dbms_output.put_line('Found: ' || k.table_name || '.' || k.column_name);
EXCEPTION
WHEN invalid_privileges THEN
NULL;
WHEN NO_DATA_FOUND THEN
dbms_output.put_line('Not found: ' || k.table_name || '.' || k.column_name);
END;
END LOOP;
END;
/
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/408197.html
標籤:
上一篇:如何檢查我是否有權創建函式?
