Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
6-96337
Kolos_rus
2003-07-31 12:38
2003.09.29
Работа с Outlook


14-96375
esu
2003-09-11 19:04
2003.09.29
Жителям Украины которые любят ДДТ


14-96415
Nikolay M.
2003-09-11 10:21
2003.09.29
Тюнинг копейки :)


3-96082
Dima(Other)
2003-09-09 09:40
2003.09.29
ADO и DLL


3-96101
Sour
2003-09-09 12:16
2003.09.29
Посоветуйте компоненту





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский