Oracle, динамический sql и именованные параметры - PullRequest
3 голосов
/ 20 апреля 2011

(я нашел это, что частично отвечает на вопрос, способ объявления будет выглядеть более аккуратно, хотя, учитывая, что мой sql is будет использоваться в oracle и mssql :) Связывание переменных в динамическом PL / SQL

У меня есть динамический sql, который я выполняю, используя синтаксис, подобный приведенному ниже:

EXECUTE IMMEDIATE plsql_block USING employeeid, sortname;

, и я могу затем получить доступ к этим переменным внутри динамического sql, используя: 1,: 2 и т. Д.Могу ли я использовать именованные параметры вместо?что-то вроде

EXECUTE IMMEDIATE plsql_block USING employeeid => employeeid 

, а затем получить к ним доступ в динамическом sql, используя: employeeid, а не полагаясь на позицию?

Если бы не моя мысль сделать что-то подобное в начале sql:

declare employeeid varchar(15 := :1; 

и тогда я могу изменить свой динамический sql на свое сердце, не беспокоясь о позиционировании.

Есть ли лучший способ?

спасибо

Ответы [ 2 ]

3 голосов
/ 20 апреля 2011

Вы можете использовать именованные аргументы в DBMS_SQL:

DECLARE
        res INT;
        cr INT;
BEGIN
        cr := DBMS_SQL.OPEN_CURSOR;
        DBMS_SQL.PARSE(cr, :plsql_block, DBMS_SQL.NATIVE);
        DBMS_SQL.BIND_VARIABLE(cr, ':employee', :employee);
        res := DBMS_SQL.EXECUTE(cr);
        DBMS_SQL.CLOSE_CURSOR(cr);
END;
3 голосов
/ 20 апреля 2011

Ваш обходной путь - это то, что я использовал в прошлом.
Также есть старый добрый DBMS_Sql , который позволяет связывать переменные, как вы могли бы через OCI. (Это то, что DBMS_Sql делает в любом случае ;-))

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...