Разрешение имен для программных объектов, таких как функции, в динамическом SQL контролируется переменной CURRENT PATH
:
CURRENT PATH
(или CURRENT_PATH
)специальный регистр задает значение VARCHAR(2048)
, которое определяет путь SQL, используемый при разрешении неквалифицированных имен функций, имен процедур, имен типов данных, имен глобальных переменных и имен объектов модулей в динамически подготовленных инструкциях SQL.
SET PATH
влияние на динамическое выражение внутри примера процедуры:
--#SET TERMINATOR @
CREATE OR REPLACE FUNCTION S1.TEST_SCALAR() RETURNS INT RETURN 1@
CREATE OR REPLACE FUNCTION S2.TEST_SCALAR() RETURNS INT RETURN 2@
CREATE OR REPLACE PROCEDURE TEST_DYN()
DYNAMIC RESULT SETS 1
BEGIN
DECLARE C1 CURSOR WITH RETURN FOR S1;
PREPARE S1 FROM 'SELECT TEST_SCALAR() AS RES FROM (VALUES 1) T(I)';
OPEN C1;
END@
SET PATH = "S1", USER, SYSTEM PATH@
CALL TEST_DYN@
SET PATH = "S2", USER, SYSTEM PATH@
CALL TEST_DYN@
Результат:
SET PATH = "S1", USER, SYSTEM PATH
DB20000I The SQL command completed successfully.
CALL TEST_DYN
Result set 1
--------------
RES
-----------
1
1 record(s) selected.
Return Status = 0
SET PATH = "S2", USER, SYSTEM PATH
DB20000I The SQL command completed successfully.
CALL TEST_DYN
Result set 1
--------------
RES
-----------
2
1 record(s) selected.
Return Status = 0