Login Login
MORE

WIDGETS

Widgets

Wanted articles
Who is online?
Article tools

Programmazione:PL-SQL Linguaggio

From Aino Wiki

Jump to: navigation, search

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


Oracle


MS SQL |


Parole chiave:

Author