stored procedures

Pubblicità

gaiapuffo

Utente Attivo
Messaggi
310
Reazioni
7
Punteggio
39
[SUB]ciao stavo studiando per conto prima stored procedures cosa nn affrontata nel corso di database....il fatto e che negli esempio che ho la funzione prende dei parametri presi dall'esterno...ma visto che le stored procedures sono diverse dal jdbc quindi nn interagiscono quale è l istruzione per passare il valore? oppure anche le stored procedur interagiscono con il programma?[/SUB]
 
Ma che RDBMS?

In MySQL puoi fare una cosa tipo questa:
Codice:
CREATE PROCEDURE build_suggesting_languages(IN in_lang VARCHAR(2))
BEGIN
    DECLARE build_done INT DEFAULT 0;
    DECLARE l_town VARCHAR(60);
    DECLARE l_state VARCHAR(60);
    DECLARE l_country VARCHAR(60);
    DECLARE l_countryCode VARCHAR(2);
    DECLARE table_name VARCHAR(20);
    DECLARE build_cursor CURSOR FOR SELECT town,state,country,countryCode FROM suggesting_places WHERE language = in_lang;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET build_done = 1;
    SET table_name = CONCAT_WS('_', 'suggesting_places', in_lang);
    SET @drop_table := CONCAT('DROP TABLE IF EXISTS ', table_name, ';');
    PREPARE drop_table_sql FROM @drop_table;
    EXECUTE drop_table_sql;
    DEALLOCATE PREPARE drop_table_sql;
    SET @create_table := CONCAT(
        'CREATE TABLE ', table_name, ' ( ',
            'id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, ',
            'town VARCHAR(60) NOT NULL, ',
            'state VARCHAR(60) NOT NULL, ',
            'country VARCHAR(60) NOT NULL, ',
            'countryCode VARCHAR(60) NOT NULL ',
            ') ENGINE=MyISAM DEFAULT CHARSET=utf8;'
    );
    PREPARE create_table_sql FROM @create_table;
    EXECUTE create_table_sql;
    DEALLOCATE PREPARE create_table_sql;
    SET @indexing_table := CONCAT('CREATE FULLTEXT INDEX index_', table_name, ' ON ', table_name,' (town);');
    PREPARE indexing_query FROM @indexing_table;
    EXECUTE indexing_query;
    DEALLOCATE PREPARE indexing_query;
    OPEN build_cursor;
    build_loop: LOOP
        FETCH build_cursor INTO l_town, l_state, l_country, l_countryCode;
        IF build_done = 1 THEN
            LEAVE build_loop;
        END IF;
        SET @suggesting_table := CONCAT('INSERT INTO ', table_name, ' (town, state, country, countryCode) VALUES ("', l_town, '","', l_state, '","', l_country, '","', l_countryCode, '");');
        PREPARE insert_query FROM @suggesting_table;
        EXECUTE insert_query;
        DEALLOCATE PREPARE insert_query;
    END LOOP;
    CLOSE build_cursor;
    SET @optimize_table := CONCAT('OPTIMIZE TABLE ', table_name, ';');
    PREPARE optimize_query FROM @optimize_table;
    EXECUTE optimize_query;
    DEALLOCATE PREPARE optimize_query;
END //
DELIMITER ;

Chiamarla con una query

CALL build_suggesting_languages('it');

se vedi nella specifica della firma della funzione c'e` IN prima del primo parametro, puoi dichiarare anche un parametro con

OUT nomevar

e poi alla fine della stored proc prendere il valore con SELECT @nomevar;


tipo come se fosse un puntatore che viene inizializzato nel corpo della funzione
 
Devi pensare la Stored Procedure come una "Funzione" che già risiede nel database. Questa funzione può accettare o meno dei parametri che serviranno appunto a parametrizzare la tua funzione. La forza della SP sta nel fatto che è già disponibile e "conosciuta" dall' RDBMS che la eseguirà più velocemente di una query che effettua la stessa operazione.
 
Pubblicità
Pubblicità
Indietro
Top