Я хочу передать весь sql-запрос в качестве лексического параметра в хранимую процедуру, а затем выполнить его. Любые предложения, как это сделать?PL/SQL: Передача лексического параметра в хранимую процедуру
ответ
вы можете попробовать это:
create or replace procedure my_proc(pstring IN varchar2)
is
begin
if length(pstring)>0 then
EXECUTE IMMEDIATE pstring;
end if;
end my_proc;
здесь является официальным оракулом документация по динамическому PLSQL: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/dynamic.htm#CHDGJEGD
Спасибо Алекс, это действительно полезно. – Tehseen
Быть очень, очень, очень уверенным, что у вас нет другого способа сделать это? Выполнение неизвестного SQL может быть очень опасным, и злоумышленник, если они сталкиваются с этим, может в принципе сделать что-либо в вашей базе данных ... –
Не уверен, что вы подразумеваете под «лексическим» параметром, но вы можете передать запрос SQL в виде VARCHAR2, а затем выполнить его с помощью EXECUTE IMMEDIATE.
То, что вы пытаетесь сделать, - это, безусловно, неправильный путь.
Execute Immediate
следует использовать с осторожностью, поскольку он может: a) налагать угрозу безопасности и b) вызывать негативные последствия для производительности, когда многие различные операторы SQL выполняются таким образом.
Однако, см. here как вставить записи, используя execute immediate
. Обратите внимание, что важно использовать переменные связывания.
Если вы хотите запустить запрос (в противоположность DML [вставки, обновления , удалить] или PL/SQL блок кода), вы можете сделать что-то вроде этого:
function get_dataset (p_sql_query in varchar2) return sys_refcursor
as
l_returnvalue sys_refcursor;
begin
open l_returnvalue for p_sql_query;
return l_returnvalue;
end get_dataset;
возвращаемое значение является «слабо Ty ped "REF CURSOR.
Затем вызывающая программа (будь то Java, .NET, PL/SQL, независимо) должна обрабатывать результат функции и закрывать курсор.
Thanx ObiWanKenobi, это полезно. – Tehseen
- 1. Передача таблицы Значения параметра в хранимую процедуру
- 2. Передача огромного строкового параметра в хранимую процедуру
- 3. Передача параметра в хранимую процедуру SQL Server
- 4. Передача datetime в хранимую процедуру
- 5. Передача списка в хранимую процедуру
- 6. Передача VARBINARY в хранимую процедуру
- 7. Передача данных в хранимую процедуру
- 8. Передача параметров в хранимую процедуру эффективным образом
- 9. Передача параметра строки xml в хранимую процедуру SQL Server
- 10. C# - Передача параметра в хранимую процедуру и возврат IEnumerable
- 11. Передача параметра с несколькими значениями в хранимую процедуру
- 12. Передача списка вместо параметра sql в хранимую процедуру
- 13. Передача параметра в хранимую процедуру из ASP.NET WinForm
- 14. VBScript: Передача параметра с нулевым значением в хранимую процедуру?
- 15. Передача двух значений в хранимую процедуру?
- 16. Передача параметров через хранимую процедуру
- 17. Передача nullable guid в хранимую процедуру
- 18. InvalidCastException - передача нулевых значений в хранимую процедуру
- 19. Передача параметров из powershell в хранимую процедуру
- 20. Ошибка прохождения параметра в хранимую процедуру
- 21. Добавление нового параметра в хранимую процедуру
- 22. Передача в массив Java в хранимую процедуру
- 23. Передача XML в хранимую процедуру в узел
- 24. Вызвать хранимую процедуру в другую хранимую процедуру
- 25. Передача нескольких строк данных в хранимую процедуру
- 26. Передача переменной в хранимую процедуру SQL ByRef?
- 27. Передача списка в хранимую процедуру TSQL 2008
- 28. PetaPoco, Передача списка в хранимую процедуру
- 29. Передача переменной количества параметров в хранимую процедуру
- 30. Передача миллисекунд в хранимую процедуру mySQL
Что значит «выполнить его»? Запрос предназначен для возврата результата - вам нужно определить, что вы хотите, чтобы хранимая процедура выполняла результаты. –
Привет, Jeffrey, Что я хочу сделать, так это дать запрос во время выполнения хранимой процедуре, например, я хочу выполнить операцию вставки. Я дам запрос вставки во время выполнения, когда я выполню процедуру. – Tehseen
Будет ли запрос всегда возвращать тот же набор столбцов и типов данных? –