以 table_name 和日期作为输入并以数字作为输出的 Oracle 函数
Oracle Function with table_name and date as input and Number as output
我正在尝试测试一个函数,我在其中传递一个 table 名称和日期作为输入,并获取一个数字作为 return 值。
我只传递日期作为绑定变量(不能传递 table_name )
CREATE OR REPLACE FUNCTION TABLE_TEST (reptable in varchar2, fltdate in varchar2) RETURN NUMBER
IS
day_exists VARCHAR2(5 CHAR);
BEGIN
execute immediate
'Select CASE WHEN max(day_i) IS NULL THEN ''NO'' ELSE ''YES'' END FROM '|| reptable ||' WHERE 1 IN
(SELECT max(day_i)
FROM '|| reptable ||'
where day_i = 1 and flt_dptr_Date_d = :1)' into day_exists
using fltdate
;
IF day_exists = 'YES' THEN
return 1;
END IF;
END TABLE_TEST;
我就是这样测试的
Select TABLE_TEST('FDR_REP', '07/25/2015') from dual;
当我单独测试它们时它工作正常,即当我只通过 table_name 或只通过日期时。
但由于某种原因,它显示错误不是有效月份。我不认为日期有任何问题。
这部分在我刚刚通过 table_name
时有效
CREATE OR replace FUNCTION TEST_FUNCTION (name_table IN VARCHAR2) RETURN NUMBER
IS
rday NUMBER;
BEGIN
execute immediate 'select day_i
FROM ' || name_table || '
WHERE day_i = 1 and rownum = 1' into rday;
return rday;
END TEST_FUNCTION;
首先尝试将您的 fltdate 转换为日期。这是您的代码的修订版:
CREATE OR REPLACE FUNCTION TABLE_TEST (reptable in varchar2, fltdate in varchar2) RETURN NUMBER
IS
day_exists VARCHAR2(5 CHAR);
BEGIN
execute immediate
'Select CASE WHEN max(day_i) IS NULL THEN ''NO'' ELSE ''YES'' END FROM '|| reptable ||' WHERE 1 IN
(SELECT max(day_i)
FROM '|| reptable ||'
where day_i = 1 and flt_dptr_Date_d = TO_DATE(:1,''MM/DD/YYYY''))' into day_exists
using fltdate
;
IF day_exists = 'YES' THEN
return 1;
END IF;
END TABLE_TEST;
我正在尝试测试一个函数,我在其中传递一个 table 名称和日期作为输入,并获取一个数字作为 return 值。 我只传递日期作为绑定变量(不能传递 table_name )
CREATE OR REPLACE FUNCTION TABLE_TEST (reptable in varchar2, fltdate in varchar2) RETURN NUMBER
IS
day_exists VARCHAR2(5 CHAR);
BEGIN
execute immediate
'Select CASE WHEN max(day_i) IS NULL THEN ''NO'' ELSE ''YES'' END FROM '|| reptable ||' WHERE 1 IN
(SELECT max(day_i)
FROM '|| reptable ||'
where day_i = 1 and flt_dptr_Date_d = :1)' into day_exists
using fltdate
;
IF day_exists = 'YES' THEN
return 1;
END IF;
END TABLE_TEST;
我就是这样测试的
Select TABLE_TEST('FDR_REP', '07/25/2015') from dual;
当我单独测试它们时它工作正常,即当我只通过 table_name 或只通过日期时。 但由于某种原因,它显示错误不是有效月份。我不认为日期有任何问题。
这部分在我刚刚通过 table_name
时有效CREATE OR replace FUNCTION TEST_FUNCTION (name_table IN VARCHAR2) RETURN NUMBER
IS
rday NUMBER;
BEGIN
execute immediate 'select day_i
FROM ' || name_table || '
WHERE day_i = 1 and rownum = 1' into rday;
return rday;
END TEST_FUNCTION;
首先尝试将您的 fltdate 转换为日期。这是您的代码的修订版:
CREATE OR REPLACE FUNCTION TABLE_TEST (reptable in varchar2, fltdate in varchar2) RETURN NUMBER
IS
day_exists VARCHAR2(5 CHAR);
BEGIN
execute immediate
'Select CASE WHEN max(day_i) IS NULL THEN ''NO'' ELSE ''YES'' END FROM '|| reptable ||' WHERE 1 IN
(SELECT max(day_i)
FROM '|| reptable ||'
where day_i = 1 and flt_dptr_Date_d = TO_DATE(:1,''MM/DD/YYYY''))' into day_exists
using fltdate
;
IF day_exists = 'YES' THEN
return 1;
END IF;
END TABLE_TEST;