コンパイルされない次の小さな関数があります。
function f_query_01 Return interval Day to second is
start_time timestamp(3);
end_time timestamp(3);
time_diff interval Day to second;
c_query_number number;
begin
start_time := systimestamp;
select count(*) into c_query_number from wg; <--This is the line that errors out
end_time := systimestamp;
time_diff := start_time - end_time;
return time_diff;
end f_query_01;
コンパイラは私に次のエラーを出します:
Error(29,3): PL/SQL: SQL Statement ignored
Error(29,44): PL/SQL: ORA-04044: procedure, function, package, or type is not allowed here
このエラーの原因とその修正方法を教えてください。
テーブルwgが存在しないようです。正しいテーブル名に更新すると、コンパイルはエラーなしで機能します。テーブルのコンパイラからのメッセージが存在しない場合に最も役立ちます。
CREATE OR REPLACE FUNCTION f_query_01
RETURN NUMBER
IS
BEGIN
DECLARE
c_query_number NUMBER DEFAULT NULL;
start_time DATE DEFAULT NULL;
end_time DATE DEFAULT NULL;
time_diff NUMBER DEFAULT NULL;
BEGIN
SELECT CAST (SYSTIMESTAMP AS DATE) INTO start_time FROM DUAL;
SELECT COUNT (*) INTO c_query_number FROM ws;
SELECT CAST (SYSTIMESTAMP AS DATE) INTO end_time FROM DUAL;
time_diff := start_time - end_time;
RETURN time_diff;
END;
END f_query_01;