【发布时间】:2021-07-25 07:27:58
【问题描述】:
我有一些使用硬编码日期的 SQL 代码。我的目标是删除硬编码的日期并用变量替换它们以使代码通用。
我的测试用例如下;
CREATE OR REPLACE FUNCTION IsDate( p_str IN VARCHAR2, p_format IN VARCHAR2 ) RETURN NUMBER AS
V_date DATE;
BEGIN
V_Date := TO_DATE( p_str, p_format );
RETURN 1;
EXCEPTION
WHEN OTHERS THEN
RETURN 0;
END;
这很好用
select IsDate(DATE '2021-07-31','YYYY-MM-DD') from dual;
这会导致错误(见下文)。有人可以解释这个问题以及如何解决它。 我正在测试实时 SQL。提前感谢所有回答的人。
exec :my_date := DATE '2021-07-31';
select IsDate( DATE my_date,'YYYY-MM-DD') from dual;
我遇到了错误
ORA-01008:并非所有变量都绑定 ORA-06512:在“SYS.DBMS_SQL”,第 1721 行
ORA-00936: 缺少表达式
【问题讨论】:
-
您的过程采用两个
varchar2输入参数,但您将date作为第一个参数传递。为什么?date ....还假定它后面有一个文本常量文字,因为它构成了一个日期文字 -
你的 oracle 版本是什么?
-
我的目标是摆脱调用函数中的硬编码日期,并在调用函数中使用变量。您能否提供有关如何实现此目的的详细回复?我正在使用实时 sql 进行测试
-
“我的目标是摆脱硬编码的日期” - 所以你需要一些类似日期的字符串的来源。它是什么?你的“约会”从何而来?
-
我希望用户像在我的 exec 示例中一样传递日期。也许我需要一个 PLSQL 包装器来调用我的 sql 代码?我希望我的 sql 代码是变量,而不是硬编码的日期。底线是我不希望用户修改任何代码。我希望我能充分解释我的问题。感谢您的耐心和专业知识
标签: sql oracle function data-binding