我必須獲取存盤在所有資料庫表中的資料的最小和最大日期,并與表名一起顯示。我寫了下面的函式來做同樣的事情
CREATE OR REPLACE FUNCTION data_bound(tbl_name IN VARCHAR2) RETURN VARCHAR2
AS
reqdates VARCHAR2;
BEGIN
EXECUTE IMMEDIATE 'SELECT concat(min(rec_date),max(rec_date)) from ' || tbl_name INTO reqdates;
RETURN reqdates;
END;
我正在嘗試使用以下方法獲取資料。
SELECT table_name, data_bound(table_name) FROM user_tables;
但是我的功能似乎確實有效,出現了多個錯誤。請您告知這里出了什么問題,以及是否有另一種更好的方法。
uj5u.com熱心網友回復:
您可以使用:
CREATE FUNCTION data_bound(
tbl_name IN VARCHAR2
) RETURN VARCHAR2
AS
reqdates VARCHAR2(39);
BEGIN
EXECUTE IMMEDIATE 'SELECT TO_CHAR(min(rec_date), ''YYYY-MM-DD HH24:MI:SS'')
|| ''-'' || TO_CHAR(max(rec_date), ''YYYY-MM-DD HH24:MI:SS'')
FROM ' || DBMS_ASSERT.SIMPLE_SQL_NAME(tbl_name)
INTO reqdates;
RETURN reqdates;
END;
/
其中,如果你有桌子:
CREATE TABLE table_name (rec_date) AS
SELECT TRUNC(SYSDATE, 'YYYY') FROM DUAL UNION ALL
SELECT SYSDATE FROM DUAL;
然后:
SELECT data_bound('TABLE_NAME') FROM DUAL;
輸出:
DATA_BOUND('TABLE_NAME') 2022-01-01 00:00:00-2022-04-19 18:57:25
db<>在這里擺弄
uj5u.com熱心網友回復:
錯誤 1:定義了 data_bound() 函式。呼叫 data_retention() 函式
錯誤2:tbl_name 被當作輸入,但沒有被使用(t_name 被使用過一次)
錯誤 3:execute immediate 陳述句中缺少“from”關鍵字
錯誤 4:“into”關鍵字應放在“from tableName”之前
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/461923.html
