Query parametriche

di il
3 risposte

Query parametriche

Salve a tutti!

Sono uno studente di informatica alle prese con l’esame di basi di dati per il quale dovrei realizzare un database con Oracle 10g XE. Sincermante conosco solo quello che fino ad ora sono riuscito a studiare di SQL (poco vista la vastità di argomenti) ed anche di Oracle.

Ad ogni modo il database è creato, anche qualche trigger e qualche procedura però son due giorni che cerco ma non riesco a trovare una soluzione ad un problema anzi….mi sento più confuso di prima e quindi spero che qualcuno di voi mi possa aiutare.

Premettendo che uso SQLPlus e PL/SQL avre qualche domnda:

-In una funzione o procedura si può utilizzare l’istruzione SELECT….INTO, ma se volessi semplicemente che la funzione mi visualizzasse il risultato di una query senza metterlo da qualche parte (solo SELECT in poche parole) magari perché vorrei che la query sia fatta in base ad un parametro da passare alla funzione?
Potre usare una query parametrica ma:

-Come si crea una query parametrica?

Scusate la banalità!

3 Risposte

  • Re: Query parametriche

    FORSE INTENDI UNA COSA COME QUESTA ?
    CREATE OR REPLACE PROCEDURE PARAMETRICA IS
    CURSOR CURS IS SELECT TABLE_NAME FROM CAT
    WHERE TABLE_NAME NOT LIKE '%BIN$%';
    B CURS%ROWTYPE ;
    STR_DLL VARCHAR2(32000);
    BEGIN
    OPEN CURS;
    LOOP
    FETCH CURS INTO B;
    EXIT WHEN CURS%NOTFOUND;
    STR_DLL:= 'SELECT COUNT(*) FROM '||B.TABLE_NAME;
    EXECUTE IMMEDIATE STR_DLL;
    DBMS_OUTPUT.PUT_LINE(STR_DLL);
    END LOOP;
    END;
  • Re: Query parametriche

    O MAGARI QUESTA

    CREATE OR REPLACE PROCEDURE PARAMETRICA IS
    f char(1);
    CURSOR CURS IS SELECT TABLE_NAME FROM CAT
    WHERE TABLE_NAME NOT LIKE '%BIN$%';
    B CURS%ROWTYPE ;
    STR_DLL VARCHAR2(32000);
    STR_DLL_1 VARCHAR(32000);
    A INTEGER;
    BEGIN
    select chr(39) into f from dual;
    OPEN CURS;
    LOOP
    FETCH CURS INTO B;
    EXIT WHEN CURS%NOTFOUND;
    execute immediate 'declare
    a integer;
    STR_DLL VARCHAR2(32000);
    begin
    str_dll:= '||f||'SELECT COUNT(*) FROM '||B.TABLE_NAME||f||';'
    ||
    'SELECT COUNT(*) INTO A FROM
    ' || B.TABLE_NAME||';'
    ||
    'DBMS_OUTPUT.PUT_LINE(str_dll ||'||f||' = '||f||'|| a )'||
    ';
    '||
    'end ;';
    END LOOP;
    END;
  • Re: Query parametriche

    Scusami ma più gioco con il plsql più forse capisco quello che cerchi , se vuoi scegliere ad esempio la tabella sulla quale vuoi fare la select cerca di studiare questa procedura

    CREATE OR REPLACE PROCEDURE PARAMETRICA(PAR_TABLE IN VARCHAR2) IS
    f char(1);
    BEGIN
    select chr(39) into f from dual;
    execute immediate 'DECLARE
    a integer;
    STR_DLL VARCHAR2(32000);
    begin
    str_dll:= '||f||'SELECT COUNT(*) FROM '||PAR_TABLE||f||';'
    ||
    'SELECT COUNT(*) INTO A FROM
    ' || PAR_TABLE||';'
    ||
    'DBMS_OUTPUT.PUT_LINE(str_dll ||'||f||' = '||f||'|| a )'||
    ';
    '||
    'end ;';
    END;

    inserendo come parametro il nome di una tabella(cfg_attivita) su un mio shema di prova il risultato e il seguente :
    SELECT COUNT(*) FROM CFG_ATTIVITA = 26
Devi accedere o registrarti per scrivere nel forum
3 risposte