我有一个有效的存储过程,并希望改进/简化它。
CREATE OR REPLACE PROCEDURE DOCSADM.DRILL_COUNTV5 ( IN_TABLE IN VARCHAR2, IN_TYPE IN VARCHAR2, OUT_COUNT OUT NUMBER) AS
BEGIN
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || IN_TABLE
|| ' WHERE TYPEVALUE = ''' || IN_TYPE || ''' '
into OUT_COUNT;
END DRILL_COUNTV5;
/
理想情况下,我希望使其更易于扩展。我想重写执行立即行,例如
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || IN_TABLE
|| ' WHERE TYPEVALUE = '':IN_TYPE'' '
into OUT_COUNT;
当我使用这个方法时,我得到 0 作为我的返回值。
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM :IN_TABLE WHERE TYPEVALUE = ''' || IN_TYPE
|| ''' ' into OUT_COUNT;
这个给了我“ORA-00903:无效的表名”。
EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || IN_TABLE
|| ' WHERE TYPEVALUE = '':1'' '
into OUT_COUNT using IN_TYPE;
给我“ORA-01006:绑定变量不存在”。
如果表绑定没有发生,我不太介意,因为这样的绑定会更少,但我真的希望能够进行 where 绑定而不使用串联。
Oracle的文档给了我几种方法,但是当我尝试它们时,它们都不起作用。