【发布时间】:2016-11-21 17:47:44
【问题描述】:
create or replace
FUNCTION JDT_UDC_Desc
(
V_SY IN VARCHAR2,
V_RT IN VARCHAR2,
V_KY IN VARCHAR2
)
RETURN VARCHAR2
AS
V_DL01 VARCHAR2(30);
BEGIN
EXECUTE IMMEDIATE 'select drdl01
from PRODCTL.F0005
WHERE DRSY = V_SY
AND DRRT = V_RT
AND ltrim(rtrim(drky)) =ltrim(rtrim(V_KY))'
INTO V_DL01
using V_SY,V_RT,V_KY;
END;
编译。我点击运行并输入以下值:
V_SY ='00',
V_RT = '01',
V_KY='04';
我得到以下错误
ORA-00904 V_KY 标识符无效
谁能帮我理解这个错误的原因?
【问题讨论】:
-
首先,这里似乎没有任何理由使用动态 SQL。您需要使用动态 SQL 的情况应该很少——如果您坚持使用静态 SQL,您的代码将会更高效、更易于维护。
-
@JustinCave 我希望这个函数使用动态变量而不是静态的。值 V_SY、V_RT 和 V_KY 是动态变量。我知道静态会很好,但需要它用于应用目的
-
不需要使用动态SQL。如果您要查询的表的名称或您要返回的列仅在运行时已知,您将使用动态 SQL。静态 SQL 完全能够处理在运行时确定绑定变量的值的查询。事实上,在实际应用程序中,99.99% 的静态 SQL 使用的变量/参数的值直到运行时才知道。
-
@JustinCave 感谢您提供的信息。您能帮我了解如何通过上述查询获得输出,还是有其他选择?我的要求是当我点击运行时我需要输入我的IN参数然后函数应该返回值
-
@JustinCave
select functionname(parameters) from tablename ...... (my parameters will vary each time)我应该可以通过这个查询得到我的函数输出