Мне нужно внести изменения в хранимую процедуру Oracle, которая имеет следующие строки.
InsStmt = 'INSERT INTO EMPLOYEE (Emp_cd, Emp_lst_nm, Emp_fst,nm) VALUES
(:Emp_cd, :Emp_lst_nm, :Emp_fst_nm);';
varExec :='
DECLARE
var1 VARCHAR2(100);
BEGIN
var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;
'||InsStmt||'
END;';
EXECUTE IMMEDIATE varExec USING ip_param_cd, ip_param_lnm, ip_param_fnm;
У меня есть только базовое представление о хранимых процедурах Oracle. После некоторого исследования я обнаружил, что || Оператор предназначен для объединения строк.
Но мне все еще интересно, что означает приведенное ниже утверждение
var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;
'||InsStmt||'
Я прошел через руководство по адресу http://docs.oracle .com / cd / B28359_01 / appdev.111 / b28843 / tdddg_procedures.htm # CIHGDECD, но помощи не удалось найти.
1 ответ
Вне контекста триггера столбец :
используется для связывания переменных внутри оператора.
Например:
EXECUTE IMMEDIATE 'UPDATE mytable SET age = 25 WHERE age = :1'
USING IN localVarAge;
В этом случае значение :1
будет заменено значением localVarAge
. Порядок появления переменных ':' в подготовленном операторе имеет значение, а не их фактические метки.
В вашем коде явно отсутствует часть, эта часть var1 := :Emp_cd||:Emp_lst_nm||:Emp_fst_nm;
должна быть заключена в кавычки. В любом случае это имело бы смысл, поскольку сразу после этого у вас есть заключительная цитата и конкатенация.
Похожие вопросы
Новые вопросы
oracle
Oracle Database - это многомодельная система управления базами данных, созданная корпорацией Oracle. НЕ используйте этот тег для других продуктов, принадлежащих Oracle, таких как Java и MySQL.