У меня есть работающая хранимая процедура, и я хотел бы ее улучшить / упростить.
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 дал мне несколько методов, но когда япопробовал их у них просто не получилось.