Newsgroup: it.comp.software.database
Titolo: PL/SQL

Qualcuno mi sa dire se è possibile creare un
oggetto(tabelle,utenti,privilegi) dall'interno di una
procedura PL/SQL?
Se la risposta è si potete farmi un esempio del tipo
procedure
begin
enn;
ciao a tutti
michele.
______________________________________________________________________
Do You Yahoo!?
Il tuo indirizzo gratis e per sempre @
yahoo.it
 su 
http://mail.yahoo.it
--
Posted from 
web3602.mail.yahoo.com
 [204.71.203.97] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 enn;
CREATE ...
es:
CREATE USER <name> identified by <password>
CREATE TABLE etc.
l'importante e' averne i privilegi (in genere un utente non ce li ha, ma
se la procedura e' creata dall'amministratore che ne da' i privilegi di
esecuzione agli utenti quello che viene fatto dalla procedura e' fatto
con privilegi di amministratore)
-- 
Greetings,
Alessandro
Pesaro, Italy





Il PL/SQL è un linguaggio procedurale che accetta i 
comandi DML per lavorare con i DLL e DCL, e quindi con i comandi del tipo GRANT 
CREATE etc, bisogna usare il SQL dinamico o il comando DBMS_SQL.


Ti rifaccio la domanda sai farmi qualche esempio riguardo a 
questo?


 






Yessss ma ancora più veloce (nel senso di compatto) é EXECUTE IMMEDIATE che
fa tutto (quasi) ció che fa il
DBMS_SQL ma in modo piú compatto (in realtá lo richiama e apre il cursore,
fa il parsing ecc, ecc,)
Dal manuale Oracle prendo e posto (P&P)
BEGIN
DML con e senza variabili 'bind'
   sql_stmt := 'INSERT INTO dept VALUES (:1, :2, :3)';
   EXECUTE IMMEDIATE sql_stmt USING my_deptno, my_dname, my_loc;
   sql_stmt := 'SELECT * FROM emp WHERE empno = :id';
   EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING 7788;
   EXECUTE IMMEDIATE 'DELETE FROM dept
      WHERE deptno = :n' USING my_deptno;
Blocco PL/SQL (udite udite)
   plsql_block := 'BEGIN emp_stuff.raise_salary(:id, :amt); END;';
   EXECUTE IMMEDIATE plsql_block USING 7788, 500;
Comandi DDL
   EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';
   sql_stmt := 'ALTER SESSION SET SQL_TRACE TRUE';
   EXECUTE IMMEDIATE sql_stmt;
END;
By

 Yessss ma ancora piů veloce (nel senso di compatto) é EXECUTE IMMEDIATE che

 Ciao Gennaro
Niet Niet Niet !!!!! (anche perché io lo uso in PL/SQL e funziona benissimo)
Dalla documentazione Oracle Manuale PL/SQL
The Need for Dynamic SQL
You need dynamic SQL in the following situations:
You want to execute a SQL data definition statement (such as CREATE), a data
control statement (such as GRANT), or a session control statement (such as
ALTER SESSION). In PL/SQL, such statements cannot be executed statically.
You want more flexibility. For example, you might want to defer your choice
of schema objects until run time. Or, you might want your program to build
different search conditions for the WHERE clause of a SELECT statement. A
more complex program might choose from various SQL operations, clauses, etc.
You use package DBMS_SQL to execute SQL statements dynamically, but you want
better performance, something easier to use, or functionality that DBMS_SQL
lacks such as support for objects and collections. (For a comparison with
DBMS_SQL, see Oracle8i Application Developer's Guide - Fundamentals.)
Using the EXECUTE IMMEDIATE Statement
The EXECUTE IMMEDIATE statement prepares (parses) and immediately executes a
dynamic SQL statement or an anonymous PL/SQL block. The syntax is
EXECUTE IMMEDIATE dynamic_string
[INTO {define_variable[, define_variable]... | record}]
[USING [IN | OUT | IN OUT] bind_argument
    [, [IN | OUT | IN OUT] bind_argument]...];
Per esempio prova a lanciare il seguente comando (papale papale) da SQL*Plus
ed otterrai
SQL> BEGIN
  2     EXECUTE IMMEDIATE 'CREATE TABLE bonus (id NUMBER, amt NUMBER)';
  3  END;
  4  /
Procedura PL/SQL completata correttamente.
SQL>
Eventualmente si puó discutere delle versioni oracle che supportano questo
comando. Io lavoro con la 8.1.5 e va tutto benissimo. Credo che con la 8.0.4
non funzioni ma che con la 8.0.5 sia stato implementato.
Baciamolemani
P.S.
Io non faccio confusione, semmai ogni tanto un po' di casino ....

 Io non faccio confusione, semmai ogni tanto un po' di casino ....
Io sempre!!!