PL SQL insert mediante EXECUTE IMMEDIATE

di il
2 risposte

PL SQL insert mediante EXECUTE IMMEDIATE

Salve,

stavo esercitandomi con pl sql ed in particolare stavo vedendo le execute immediate

Il mio scopo è, tramite due procedure, creare una tabella e inserire i dati in essa.

Questa è la procedura che crea la tabella e fin qui ci sono

create or replace PROCEDURE crea_tab_execute_immediate IS
  l_count NUMBER;
BEGIN
  --controllo se la tabella esiste nel db
  SELECT COUNT(*)
  INTO l_count
  FROM USER_TABLES
  WHERE UPPER(TABLE_NAME) = 'TAB_EX_IM';
  --se esiste la elimino ()
  IF l_count > 0 THEN
    EXECUTE IMMEDIATE 'DROP TABLE tab_ex_im';
  END IF;
  EXECUTE IMMEDIATE 'CREATE TABLE tab_tex_in (ID NUMBER(10),NOME VARCHAR(50), COGNOME VARCHAR(50), NATO DATE)';
EXCEPTION
WHEN NO_DATA_FOUND THEN
  NULL;
END crea_tab_execute_immediate;
poi ho creato un'altra procedura che dovrebbe inserirmi i dati nella mia tabella, in questo modo:

create or replace PROCEDURE inserisci_in_tab (P_ID NUMBER,P_NOME VARCHAR2, P_COGNOME VARCHAR2, P_DATA DATE) AS
   id_ins number(3):= P_ID;
   nome_ins varchar2(50) := P_NOME;
   cognome_ins varchar2(50) := P_COGNOME;
   data_ins date := P_DATA;
BEGIN
    EXECUTE IMMEDIATE 'INSERT INTO tab_tex_in VALUES ( id_ins, nome_ins, cognome_ins, data_ins)';
  COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
  NULL;
END inserisci_in_tab;
La procedura viene compilata correttamente, ma quando provo ad inserire i dati in questo modo

EXECUTE inserisci_in_tab(1,'marco','rossi','19-Dicembre-1980');

ho il seguente errore:
Errore con inizio alla riga : 1 nel comando -
EXECUTE inserisci_in_tab(1,'marco','rossi','19-Dicembre-1980')
Report error -
ORA-00984: colonna non consentita in questo caso
ORA-06512: a "HR.INSERISCI_IN_TAB", line 7
ORA-06512: a line 1
00984. 00000 -  "column not allowed here"
*Cause:    
*Action:
Qualcuno potrebbe aiutarmi? non riesco a venirne a capo.

2 Risposte

  • Re: PL SQL insert mediante EXECUTE IMMEDIATE

    Sei sicuro che il formato di data che usi sia corretto?
    Verifica bene perché a me non lo sembra per niente...
  • Re: PL SQL insert mediante EXECUTE IMMEDIATE

    gibra ha scritto:


    Sei sicuro che il formato di data che usi sia corretto?
    Verifica bene perché a me non lo sembra per niente...
    Credo di si. Io ho usato sempre questo modo per inserire le date.

    infatti se provo a dare solo il comando SQL

    INSERT INTO tab_tex_in VALUES ( 1,'Marco','Rossi', '19-dicembre-1980') l'inserisce correttamente
Devi accedere o registrarti per scrivere nel forum
2 risposte