Difference between revisions of "Programmazione:PL-SQL Linguaggio"
From Aino Wiki
(→Assegnazioni) |
(No difference)
|
Latest revision as of 13:18, 14 March 2019
Contents
[hide]Introduzione
Il linguaggio SQL usato in Oracle si chiama PL-SQL, la prima differenza saliente rispetto a SQL Server (T-SQL) è che ogni query deve terminare col ;
Altra cosa di rilievo rispetto a T-SQL è che ogni Query di puro calcolo va fatta sulla tabella di sistema "DUAL" cosa invece non necessaria in SQL Server.
Es. per visualizzare la data di sistema:
1 2 3 | SELECT sysdate FROM dual; |
Basi
Linguaggio
Definire variabili e output
Il seguente esempio funziona in Oracle SQL Developer:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SET SERVEROUTPUT ON --Per abilitare l'output nell'ambiente DECLARE linea varchar2(40) := 'Hello World' ; --Definizione ed assegnamento startdate number; --Altre variabili a seguire qui... d_today date ; n_sales number; n_order number(8); BEGIN --Primo modo di assegnamento: SELECT 20190314 INTO startdate FROM dual; Dbms_Output.Put_Line(startdate); --Stamperà l'output nella finestra relativa --Secondo modo di assegnamento: --linea := 'Ciao provoloni!'; dbms_output.put_line (linea); END ; |
Produrrà il seguente output nella finestra sottostante il foglio di lavoro "Output script":
blocco anonimo completato 20190314 Ciao provoloni!
Assegnazioni
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SET SERVEROUTPUT ON --Per abilitare l'output nell'ambiente DECLARE i_StartDate VARCHAR2(20) := '03/14/2019 13:59:59' ; i_EndDate VARCHAR2(20) := '03/30/2019 13:59:59' ; v_StartDate DATE ; v_EndDate DATE ; BEGIN -- Assegnazione v_StartDate := TO_DATE(i_StartDate, 'MM/DD/YYYY HH24:MI:SS' ); v_EndDate := TO_DATE(i_EndDate, 'MM/DD/YYYY HH24:MI:SS' ); dbms_output.put_line (v_StartDate); dbms_output.put_line (v_EndDate); END ; |
Output:
blocco anonimo completato 14-MAR-19 30-MAR-19
Assegnazione in una SELECT
1 2 3 4 | SELECT COUNT (*) INTO v_Num FROM V_B_RPT_USERINFO WHERE USERNAME = i_UserName; |
Controllo del flusso
1 2 3 4 | -- IF IF (i_StartDate IS NULL ) OR (i_EndDate IS NULL ) OR (v_StartDate > v_EndDate) THEN RAISE eInPut; END IF; |
SELEZIONI
COUNT
1 2 3 | SELECT COUNT (*) INTO v_Num FROM V_B_RPT_USERINFO; |
TOP n
Per selezionare le prime n righe si può usare il campo 'rownum'
1 2 3 4 5 | --SELECT TOP 100 * ... SELECT * FROM ICD.T_C_RPT_SGLTRKCALLDISTR_VDF WHERE rownum <= 100 ORDER BY COLLECTIONBEGINTIME; |
MODIFICHE
Ogni modifica DEVE essere seguita dal COMMIT
DELETE
1 2 3 | DELETE FROM T_C_RPT_SGLTRKCALLDISTR_VDF WHERE USERNAME = i_UserName; COMMIT ; |
INSERT Select
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | INSERT INTO T_C_RPT_SGLTRKCALLDISTR_VDF (COLLECTIONBEGINTIME, UAPSite, MOIIDNAME, BT, OT, USERNAME ) SELECT TO_CHAR(COLLECTIONBEGINTIME, 'MM/DD/YYYY' ), DECODE( A.UAPSite, 'Milano-UAP-MGC' , 'Milano' , 'Roma-UAP-MGC' , 'Roma' ), A.MOIIDNAME, NVL( SUM (BT), 0), NVL( SUM (OT), 0), i_UserName FROM T_C_I2000_TRUNKGRPOUTCOMING T, T_B_TMP_TRUNKGROUP A WHERE Collectionbegintime >= v_StartDate AND Collectionbegintime < v_EndDate AND T.NEID = A.DevID AND T.MoiID = A.MoiID AND A.UserName = i_UserName GROUP BY TO_CHAR(COLLECTIONBEGINTIME, 'MM/DD/YYYY' ), A.UAPSite,A.MOIIDNAME; --HAVING NVL(SUM(BT), 0) > 0 ; --AP Eliminazione 26/8/2014 COMMIT ; |
Mappa e Link
MS SQL |
Parole chiave: