CREATE FUNCTION function_name(
p_table IN VARCHAR2,
amount IN NUMBER,
limit_amt IN NUMBER,
var_pi_empid IN VARCHAR2
)
IS
var_l_count NUMBER(10,0);
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*)'
|| ' FROM ' || DBMS_ASSERT.SQL_OBJECT_NAME(p_table)
|| ' WHERE :1 > :2'
|| ' AND EMPID = :3'
INTO var_l_count
USING amount, limit_amt, var_pi_empid;
RETURN VAR_L_COUNT;
END;
/
如果amount或limit_amt是列(而不是变量),那么不要将它们作为变量传递:
CREATE FUNCTION function_name(
p_table IN VARCHAR2,
var_pi_empid IN VARCHAR2
)
IS
var_l_count NUMBER(10,0);
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*)'
|| ' FROM ' || DBMS_ASSERT.SQL_OBJECT_NAME(p_table)
|| ' WHERE amount > limit_amt'
|| ' AND EMPID = :1'
INTO var_l_count
USING var_pi_empid;
RETURN VAR_L_COUNT;
END;
/
2条答案
按热度按时间y3bcpkx11#
很明显,不是那样的,你也注意到了。
p_table
,limit_amt
,var_pi_empid
);通常,如果你发布了整个代码,它会有所帮助from
子句insert into
,而是在执行它时执行dbms_assert
包和绑定变量dbms_output.put_line
)或将它用作函数的 * 返回值 *,以便您可以首先查看它,然后-一旦您确定一切正常-执行它。这是一个工作示例;它可能需要被修改,这取决于你在你的模式/表中真正拥有什么。
样本数据:
功能:
测试:
7xzttuei2#
1.尽可能使用绑定变量。
1.在你不能清理的地方清理你的输入。
1.不要在
EXECUTE IMMEDIATE
代码中包含语句终止符(;
)。1.如前所述,在文字和连接变量之间缺少空格。
如果
amount
或limit_amt
是列(而不是变量),那么不要将它们作为变量传递: