Я хотел бы создать процедуру, которая принимает таблицу (T в примере) в качестве входных данных. Однако я не хочу указывать имя таблицы в виде символа и делать что-то «dynamici c», например
begin
execute immediate ('delete from '||T||' where ...');
end;
, потому что реальная задача, с которой я имею дело, включает в себя несколько входных данных для функции и длинный запрос на выполнение, который имеет много вершин ... строка для выполнения становится действительно грязной и трудной для отладки. Я хотел бы иметь что-то простое, как следующее (что работает):
CREATE or replace PROCEDURE fun (x NUMBER) AS
BEGIN
DELETE FROM MyTable WHERE MyTable.var= fun.x;
END;
/
Однако, давая таблицу в качестве входных данных для процедуры (мне нужно сделать это, потому что в противном случае в реальной задаче я бы необходимо изменить букву «Т» во многих случаях в рамках процедуры) не работает:
CREATE or replace PROCEDURE fun (x NUMBER, T table) AS
BEGIN
DELETE FROM T WHERE T.var= fun.x;
END;
/
Errors for PROCEDURE FUN
----------------------------
L:1 C:32 PLS-00103: Encountered the symbol "TABLE" when expecting one of the following:
in out <an identifier> <a double-quoted delimited-identifier>
... long double ref char time timestamp interval date binary
national character nchar
The symbol "<an identifier> was inserted before "TABLE" to continue.
1 statement failed.
Возможно ли иметь что-то близкое к тому, что я хочу?