sql >> Databasteknik >  >> RDS >> Oracle

Skapa databastabell i PL/SQL-proceduren

Båda procedurerna måste använda dynamisk SQL:

  • print_info eftersom den infogas i en tabell som - vid kompileringstillfället - inte existerar ännu
  • create_table eftersom den kör DDL och - för att göra det - måste du använda dynamisk SQL

Därför:

SQL> CREATE OR REPLACE PROCEDURE PRINT_INFO
  2  IS
  3  BEGIN
  4    execute immediate q'[INSERT INTO TABLE_T (TABLE_ID, MESSAGE) VALUES (1, 'Hello World!')]';
  5  END PRINT_INFO;
  6  /

Procedure created.

SQL> CREATE OR REPLACE PROCEDURE CREATE_TABLE
  2  IS
  3  BEGIN
  4    execute immediate 'CREATE TABLE TABLE_T(' ||
  5      'TABLE_ID NUMBER NOT NULL, ' ||
  6      ' MESSAGE VARCHAR2(25), '    ||
  7      ' PRIMARY KEY(TABLE_ID) '    ||
  8      ')';
  9
 10    PRINT_INFO;
 11  END CREATE_TABLE;
 12  /

Procedure created.

SQL> EXEC CREATE_TABLE;

PL/SQL procedure successfully completed.

SQL> SELECT * FROM table_t;

  TABLE_ID MESSAGE
---------- -------------------------
         1 Hello World!

SQL>


  1. Söker sammanlänkade fält

  2. Varför är tröskeln för PostgreSQL JDBC-förberedda uttalanden satt till 5 som standard?

  3. Hur importerar jag en SQL-fil med kommandoraden i MySQL?

  4. Läser PHP7:s PDO ext hela resultatuppsättningen i minnet?