I comandi CREA [O SOSTITUISCI] PROCEDURA
Usate il comando CREATE PROCEDURE per creare una stored procedure. Usare CREATE OR REPLACE PROCEDURE per creare una stored procedure o per aggiornare una procedura esistente con un nuovo tipo di ritorno, permessi di esecuzione o corpo della procedura.
Sintesi
CREATE [OR REPLACE] PROCEDURE <name> (<arguments>)
RETURNS <type> [ [ EXECUTE AS OWNER | EXECUTE AS CALLER ] ] LANGUAGE
NZPLSQL AS <procedure_body>;
Input
| Immissione | Descrizione |
|---|---|
| Nome | Il nome della stored procedure che si desidera creare o sostituire. Questo nome è l'identificatore SQL utilizzato per avviare la procedura in un'espressione SQL. Se la stored procedure esiste, non è possibile modificarne il nome con il comando CREATE OR REPLACE. Per i sistemi che supportano più schemi, è possibile specificare un nome nel formato schema.procedure per creare una procedura in uno schema diverso da quello del database corrente. Non è possibile creare una procedura in un altro database. |
| argomenti | Specifica un elenco di tipi di dati di argomenti completamente specificati. È inoltre possibile specificare il valore VARARGS per creare una procedura ad argomenti variabili in cui gli utenti possono inserire fino a 64 valori di qualsiasi tipo di dati supportati. VARARGS è un valore mutuamente esclusivo; non è possibile specificare altri argomenti nell'elenco. Se la stored procedure esiste, non è possibile modificare l'elenco dei tipi di argomenti con il comando CREATE OR REPLACE. È possibile modificare alcuni aspetti dei tipi di argomenti; ad esempio, è possibile modificare la dimensione di una stringa o la precisione e la scala di un valore numerico. È anche possibile rimuovere VARARGS dall'elenco degli argomenti o aggiungerlo a un elenco di argomenti altrimenti vuoto. |
| RETURNS <tipo> | Specifica il tipo di dati restituiti dalla procedura. Il valore <tipo>può essere un tipo di dati Netezza Performance Server o il valore REFTABLE (<nome-tabella>) per indicare la restituzione di un set di risultati che assomiglia alla tabella specificata. La tabella deve esistere, anche se può essere vuota, e continua a esistere anche dopo la procedura. |
| ESEGUIRE COME PROPRIETARIO | Se specificato, la stored procedure viene eseguita utilizzando l'ID del proprietario della procedura per tutti i controlli di accesso e di autorizzazione. Questo è il valore predefinito. |
| ESEGUIRE COME CHIAMANTE | Se specificato, la stored procedure viene eseguita utilizzando l'ID dell'utente che ha chiamato la procedura per tutti i controlli di accesso e di autorizzazione. |
| LINGUA | Specifica il linguaggio di programmazione utilizzato per la procedura. Il valore predefinito e solo supportato è NZPLSQL. |
| corpo_procedura | Specifica il testo della procedura e deve essere racchiuso da virgolette singole o da una coppia BEGIN_PROC/END_PROC. È possibile offuscare il corpo per mascherare il contenuto agli utenti che hanno il permesso di mostrare la procedura. |
Output
| Emissione | Descrizione |
|---|---|
| CREATE PROCEDURE | Il messaggio che il sistema restituisce se il comando ha successo. |
| ERRORE: creazione di una procedura: permesso negato. | Il messaggio indica che l'utente non dispone dell'autorizzazione a creare una procedura. |
| ERRORE: L'utente 'username' non è autorizzato a creare/togliere procedure. | Il sistema restituisce questo messaggio se l'account utente non ha l'autorizzazione a creare una stored procedure. |
| ERRORE: il sinonimo 'nome' esiste già | Il sistema restituisce questo messaggio se esiste un sinonimo con il nome specificato per la stored procedure. |
| ERRORE: ProcedureCreate: procedura NAME esiste già con la stessa firma | Questo errore viene restituito quando si emette un comando CREATE PROCEDURE e nel database esiste una stored procedure con lo stesso nome e lo stesso elenco di tipi di argomenti. Utilizzare invece CREATE OR REPLACE PROCEDURE. |
| AVVISO: FunctionCreate: UDX NAME(ARGS) esistente differisce nella dimensione degli argomenti stringa/numerici | Questo messaggio indica che esiste una stored procedure con il nome ma con dimensioni diverse specificate per gli argomenti stringa o numerici. Se non si intende modificare la firma della stored procedure, verificare la firma e assicurarsi che sia corretta. |
| ERRORE: Impossibile specificare gli argomenti di una procedura varargs | Non è possibile specificare sia il valore VARARGS che qualsiasi altro valore di argomento nell'elenco degli argomenti. Il valore VARARGS è mutuamente esclusivo. |
Descrizione
Quando si crea una stored procedure, la firma della stored procedure (cioè il nome e l'elenco dei tipi di argomenti) deve essere unica all'interno del database. Nessun'altra stored procedure può avere lo stesso nome e lo stesso elenco di tipi di argomenti nello stesso database.
Non è possibile modificare il nome della stored procedure o l'elenco dei tipi di argomenti con il comando CREATE OR REPLACE. È possibile modificare alcuni aspetti dei tipi di argomento; ad esempio, è possibile modificare la dimensione di una stringa o la precisione e la scala di un valore numerico, e si può aggiungere o rimuovere il valore VARARGS in un elenco di argomenti altrimenti vuoto. Per modificare il nome o l'elenco dei tipi di argomenti di una stored procedure, è necessario abbandonare la stored procedure e quindi creare una stored procedure con il nuovo nome o il nuovo elenco di tipi di argomenti.
Non è possibile sostituire una stored procedure attualmente in uso in una query attiva. Dopo il completamento della transazione per una query attiva, il sistema Netezza Performance Server elabora il comando CREATE OR REPLACE PROCEDURE.
- Privilegi richiesti
- Per utilizzare il comando CREA PROCEDURA è necessario disporre dell'autorizzazione a creare una procedura. Inoltre, se si utilizza CREATE OR REPLACE PROCEDURE per modificare una stored procedure, è necessario disporre dei permessi Create Procedure e Alter per modificarla.
- Attività comuni
- Usate il comando CREATE PROCEDURE per creare e diventare proprietario di una nuova stored procedure. Si può usare il comando ALTER PROCEDURE per cambiare il proprietario di una procedura.
Utilizzo
customername: MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE customer() RETURNS INT8
LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The customer
name is alpha'; END; END_PROC;Creare una nuova procedura chiamata 'customername in uno schema diverso dello stesso database:
MYDB.SCHEMA(USER)=> CREATE OR REPLACE PROCEDURE sch_two.customer()
RETURNS INT8 LANGUAGE NZPLSQL AS BEGIN_PROC BEGIN RAISE NOTICE 'The
customer name is alpha'; END; END_PROC;