Вы можете использовать этот способ ниже, используя ключевые слова rowtype
и type
для значений whole row
и column
соответственно:
SQL> set serveroutput on
SQL> declare
q varchar2(4000);
rt tb1%rowtype;
i_name tb1.name%type := 'Mohammad';
o_surname tb1.surname%type;
begin
q := 'select * from tb1 t';
if i_name is not null then
q := q || ' where ( t.name = :Param1 or :Param1 is null )';
end if;
execute immediate q into rt using i_name, i_name;
-- "i_name" appears twice because of ":Param1" appears twice in the string "q"
o_surname := rt.surname;
dbms_output.put_line(rt.surname);
end;
Taleshi
, поскольку есть только один параметр, то :Param1
соответствует i_name
. Если у нас было более одного параметра, то все должно совпадать в порядке появления параметров связывания в строке sql с переменными, разделенными запятыми, такими как i_name, ....
в списке using
.