Login Login
MORE

Difference between revisions of "Programmazione:PL-SQL Linguaggio"

From Aino Wiki

Jump to: navigation, search
(Assegnazioni)
 
(No difference)

Latest revision as of 13:18, 14 March 2019

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


Oracle


MS SQL |


Parole chiave: