2015-08-19 2 views
1

Я столкнулся с проблемой при обновлении 100 таблиц. Проблема заключается в следующем:Обновление с использованием списка таблиц

Я должен обновить 299 столбцов в 100 таблицах, и для этого мне нужно создать одну процедуру оракула. Я создал таблицу с двумя столбцами, где я хранящих имя таблицы и столбцов для, например:

lookup_table:------ 
table_name column_name 

Теперь то, что я хочу сделать, это выбрать каждую строку и обновить COLS на основе имени таблицы, поэтому мне нужно использовать имя_таблицы и имя_столбца в качестве переменных.

Сообщите мне, если кто-то работал над этим типом сценария.

ответ

0

Для таких динамических операций, вам необходимо (аб) использовать EXECUTE IMMEDIATE в PL/SQL. В SQL вы не можете использовать имена объектов динамически, это должно быть статическое.

Я бы предложил сделать это в SQL и подготовить необходимые операторы обновления. Использование хорошего текстового редактора не должно быть сложной задачей.

Но, если вы все еще хотите сделать это в PL/SQL, то вам нужно сначала построить SQL заявления динамически, а затем использовать EXECUTE IMMEDIATE.

Например,

SQL> set serveroutput on 
SQL> DECLARE 
    2 var_sql VARCHAR2(1000); 
    3 var_tab VARCHAR2(10); 
    4 var_ename VARCHAR2(10); 
    5 BEGIN 
    6 var_tab:= 'EMP'; 
    7 var_sql :='SELECT empno FROM '||var_tab||' WHERE empno=7369'; 
    8 EXECUTE IMMEDIATE var_sql INTO var_ename; 
    9 DBMS_OUTPUT.PUT_LINE('Employee name is '||var_ename); 
10 END; 
11/
Employee name is 7369 

PL/SQL procedure successfully completed. 

SQL> 
Смежные вопросы