Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.29;
Скачать: CL | DM;

Вниз

PL/SQL - вопрос на засыпку   Найти похожие ветки 

 
Rel_   (2003-09-08 14:12) [0]

Существуют ли в PL/SQL стандартные средства динамического составления строки запроса и его реализации.

Другими словами, модно ли реализовать в виде хранимой процедуры следующий дкльфовый код

SQL.Text := Format("select %s from someTable where %s", [...])

ну и потом загнать всё энто хозяйство в курсор или представление типа : select ... into ....


 
Danilka ©   (2003-09-08 14:19) [1]

можно :))


 
DenK_vrtz ©   (2003-09-08 14:21) [2]

использовать пакет dbms_sql


 
Danilka ©   (2003-09-08 14:25) [3]

DenK_vrtz © (08.09.03 14:21)
можно и без него, с.м. EXECUTE IMMEDIATE

Вот примеры из документации:

DECLARE
sql_stmt VARCHAR2(200);
plsql_block VARCHAR2(500);
emp_id NUMBER(4) := 7566;
salary NUMBER(7,2);
dept_id NUMBER(2) := 50;
dept_name VARCHAR2(14) := "PERSONNEL";
location VARCHAR2(13) := "DALLAS";
emp_rec emp%ROWTYPE;
BEGIN
EXECUTE IMMEDIATE "CREATE TABLE bonus (id NUMBER, amt NUMBER)";

sql_stmt := "INSERT INTO dept VALUES (:1, :2, :3)";
EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;

sql_stmt := "SELECT * FROM emp WHERE empno = :id";
EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;

plsql_block := "BEGIN emp_pkg.raise_salary(:id, :amt); END;";
EXECUTE IMMEDIATE plsql_block USING 7788, 500;

sql_stmt := "UPDATE emp SET sal = 2000 WHERE empno = :1
RETURNING sal INTO :2";
EXECUTE IMMEDIATE sql_stmt USING emp_id RETURNING INTO salary;

EXECUTE IMMEDIATE "DELETE FROM dept WHERE deptno = :num"
USING dept_id;

EXECUTE IMMEDIATE "ALTER SESSION SET SQL_TRACE TRUE";
END;


 
Rel_   (2003-09-08 14:32) [4]

to Danilka ©
Здорово, а КАК??? - просто в PL/SQL я делаю первые шаги.

Для начала, есть некая процедура

SET SomeProc(s1 varchar(50), ...., id : integer) on
...
BEGIN
SELECT someCol
INTO str
FROM some_table
WHERE code = id and name=s1;
...
END;

можно (и как правильно) заменить энто на нечто вроде ???

SET SomeProc(s1 varchar(50), ...., id : integer) on
...
BEGIN
str := Format(....,[...]);
...
END;

to DenK_vrtz © А что это такое ???


 
Rel_   (2003-09-08 14:34) [5]

to Danilka © Всё, ОГРОМНОЕ СПАСИБО, вопрос закрыт !!!


 
Vlad ©   (2003-09-08 14:37) [6]

Не Format, а например так
str := "INSERT " || "INTO " || "TABLE " .... но вместо того что в кавычках , подставляй символьные переменные, которые формируешь динамически.


 
Rel_   (2003-09-08 14:38) [7]

to Danilka © Круто, когда Knowledge Expert есть под рукой (но я, честно говоря, даже не догадался бы по какому ключевому слову искать). Ещё раз СПАСИБО!!!


 
Rel_   (2003-09-08 14:39) [8]

to Vlad © И так тоже подойдёт - спасибо.



Страницы: 1 вся ветка

Текущий архив: 2003.09.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.028 c
3-96156
rosl
2003-09-08 03:40
2003.09.29
сотрировка


7-96459
Landgraph
2003-07-17 09:12
2003.09.29
Разрешение в DOS


1-96207
Эдуард
2003-09-17 10:41
2003.09.29
Кто нубудь встречал такой компонент?


1-96187
petro
2003-09-16 11:26
2003.09.29
richedit


1-96235
Qwerr
2003-09-17 17:28
2003.09.29
Мышька !