Difference between revisions of "Programmazione:PL-SQL Linguaggio"
From Aino Wiki
(→Assegnazioni) |
(No difference)
|
Latest revision as of 12:18, 14 March 2019
Contents
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:
SELECT sysdate FROM dual;
Basi
Linguaggio
Definire variabili e output
Il seguente esempio funziona in Oracle SQL Developer:
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
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
SELECT COUNT(*) INTO v_Num FROM V_B_RPT_USERINFO WHERE USERNAME = i_UserName;
Controllo del flusso
-- IF IF (i_StartDate IS NULL) OR (i_EndDate IS NULL) OR (v_StartDate > v_EndDate) THEN RAISE eInPut; END IF;
SELEZIONI
COUNT
SELECT COUNT(*) INTO v_Num FROM V_B_RPT_USERINFO;
TOP n
Per selezionare le prime n righe si può usare il campo 'rownum'
--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
DELETE FROM T_C_RPT_SGLTRKCALLDISTR_VDF WHERE USERNAME = i_UserName; COMMIT;
INSERT Select
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: