Форум: "Базы";
Текущий архив: 2003.09.29;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.009 c