powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Динамический SQL ???
9 сообщений из 9, страница 1 из 1
Динамический SQL ???
    #32136760
mutant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Динамический SQL
Ввел переменную и выполняю
sql_statment := 'select nom into res from opr';
execute immediate sql_statment;

Оракл Ругается.

Но если в переменной 'insert ...' или 'updete...' - все нормально,
а мне нужен 'select '. Кто подскажет?
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32136762
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А откуда он узнает про res?
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32136789
are
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
are
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
declare  
  ln_cnt integer;
begin
  for rc in (select * from user_tab_columns where data_type = 'VARCHAR2') loop
      execute immediate 'begin select count(1) into :cnt from '||rc.table_name||' where rtrim('||rc.column_name||') !='||rc.column_name||';end;'
        using out ln_cnt;
    if  0  != ln_cnt then
      dbms_output.put_line(rc.table_name||'.'||rc.column_name);       
      dbms_output.put('try to update...');
      
      begin
        execute immediate 'update '||rc.table_name||' set '||rc.column_name||'=rtrim('||rc.column_name||')';
        dbms_output.put_line('done');
      exception when others then
        dbms_output.put_line('error');
      end;
            
    end if;    
  end loop;
end;  
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32136886
mutant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переменная :cnt - внешняя или в процедуре (функции)?
И вообще как это работает?
Что-то я пробовал - не выходит.
Мне нужно select-ом получить значение и вернуть его.

create or replace function next_unn(v_table in varchar2, v_unn in varchar2 default 'unn') return number is
Result number;
begin
execute immediate 'begin select max(unn) into :res from opr; end;'; using Result;

return(Result + 1);
exception
when others then
return (NULL);
end next_unn;

Что неправильно?
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32136923
Trampler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
declare
v_res number;
begin
EXECUTE IMMEDIATE 'select max(unn) from opr' INTO v_res;
end;
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32136941
mutant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Trampler, твой вариант не работает...
У тебя срабатывает или?
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32136964
Trampler
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Под 9.2.0.2 пробовал такой вариант, работает -
Код: plaintext
1.
2.
3.
4.
5.
6.
declare 
v_res DATE; 
begin 
EXECUTE IMMEDIATE 'select SYSDATE from DUAL' INTO v_res; 
dbms_Output.PUT_LINE(TO_CHAR(V_RES,'DD.MM.YYYY'));
end;


Под 8i тоже все работает.
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32136981
mutant
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, Trampler, разобрался.
...
Рейтинг: 0 / 0
Динамический SQL ???
    #32137232
are
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
are
Гость
в догонку, несмотря на то что разобрался

Код: plaintext
1.
execute immediate 'begin select max(unn) into :res from opr; end;'; using Result; 


после using забыл написать out

Код: plaintext
1.
execute immediate 'begin select max(unn) into :res from opr; end;'; using out Result; 
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Динамический SQL ???
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]