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

Il comando CREATE OR REPLACE PROCEDURE riceve i seguenti input:
Tabella 1. CREARE O SOSTITUIRE LA PROCEDURA INGRESSI
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

Il comando CREATE [OR REPLACE] PROCEDURE ha i seguenti output:
Tabella 2. CREARE [O SOSTITUIRE] LA PROCEDURA DI USCITA
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

Creare una procedura chiamata '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;