sql >> Database teknologi >  >> RDS >> Oracle

Hvordan man erklærer en talvariabel, hvor jeg kan gemme tabellens antal i min løkke

Der er tre ting galt med din dynamiske SQL.

  1. EXECUTE IMMEDIATE er ikke en funktion:den korrekte syntaks er execute immediate '<<query>>' into <<variable>> .
  2. En INSERT-sætning tager en VALUES-sætning eller en SELECT, men ikke begge. SELECT ville være meget forkert i dette tilfælde. Bemærk også, at det er VALUES ikke VALUE.
  3. COLUMN_NAME er en streng bogstavelig i den dynamiske SQL, så den skal stå i anførselstegn. Men fordi SQL-sætningen i sig selv er en streng, skal anførselstegn i dynamiske strenge escapes, så det skal være `'''||kolonne_navn||'''.

Så den korrigerede version vil se nogenlunde sådan her ud

declare
  Cursor C_TABLE  is 
    select trim(table_name) as table_name
      from all_tables
     where table_name in ('T1', 'T2', 'T3');

  V_ROWNUM number;

begin
    for m in C_TABLE
      loop 
          for i in ( select column_name 
                      from (
                          select c.column_name
                             from all_tab_columns c
                            where c.table_name = m.table_name 
                              and c.owner = 'owner1' 
                            )  
                    )       
     loop
         execute immediate 'select count(*) from ' || m.table_name into  V_ROWNUM;
         execute immediate 'insert into MY_table values ( ''' || i.column_name || ''', ' || V_ROWNUM || ')';

        end loop;
    end loop;
end;
/

Dynamisk SQL er svært, fordi det gør kompileringsfejl til runtime-fejl. Det er god praksis at skrive sætningerne først som statisk SQL. Når du har fået den grundlæggende syntaks rigtig, kan du konvertere den til dynamisk SQL.



  1. MySQL tidsstempel med to kolonners standard NU-værdi FEJL 1067

  2. Postgresql fuldtekstsøgning i postgresql - japansk, kinesisk, arabisk

  3. Hvordan opretter man forbindelse til Microsoft SQL Server 2008 (MSSQL) fra Matlab?

  4. Sådan hentes og udfyldes værdier fra mysql til HTML, vælg indstillinger dynamisk i jsp og ajax for to, vælg indstillingsboks