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

Hvordan bruges hvis eksisterer - hvis ikke findes i PL/SQL?

Din kode er for det meste god, men du bliver nødt til at ændre den enten sådan her:

DECLARE
l_count NUMBER;
l_count_2 NUMBER;
BEGIN
select count(*) into l_count from table_1 where name='NAME_1';
IF l_count = 0  then
    BEGIN 
        select count(*) into l_count_2 FROM dba_tab_cols  WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';

        IF l_count_2 > 0 THEN        
          sql_cnt :=  'INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES (''value1'', ''select max(column) from table_2'', ''20'')';          
        ELSE             
           sql_cnt := 'INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES (''value1'', ''select max(column) from table_2'')';
        END IF;                    
       BEGIN
         EXECUTE IMMEDIATE sql_cnt ;
       END;
    END;
END IF;       
END;      

eller sådan her:

DECLARE
l_count NUMBER;
l_count_2 NUMBER;
BEGIN
select count(*) into l_count from table_1 where name='NAME_1';
IF l_count = 0  then
    BEGIN 
        select count(*) into l_count_2 FROM dba_tab_cols  WHERE TABLE_NAME = 'table_1' AND COLUMN_NAME='NAME_2';

        IF l_count_2 > 0 THEN        
          INSERT INTO table_1 (xycolumn1, xycolumn2, xycolumn3) VALUES ('value1', 'select max(column) from table_2', '20' );          
        ELSE             
          INSERT INTO table_1 (xycolumn1, xycolumn2) VALUES ('value1', 'select max(column) from table_2');
        END IF;   
    END;
END IF;       
END;      

Den første mulighed er at bruge den korrekte Oracle-stavning til strengoprettelse og dynamisk SQL, og den anden mulighed er at undgå dynamisk SQL helt ved at udføre INSERT på stedet (den mulighed, jeg foretrækker).

REDIGERING: Fejlen du fik var fordi du ikke indkapslede din INSERT inde i en snor. Det var det, jeg ændrede for dig i min første mulighed, da jeg nævnte correct Oracle spelling for string creations and dynamic SQL .

Jeg håber, jeg hjalp!



  1. Script til import af mysql-database fra en bestemt filplacering

  2. MySQL:Opdatering af alle rækker ved at sætte et felt til 0, men sætte en rækkes felt til 1

  3. oracle diff:hvordan man sammenligner to tabeller?

  4. MySQL-databasefejl:Konstante, tilfældige eller tidszoneafhængige udtryk i (under)partitioneringsfunktion er ikke tilladt