6 Aralık 2021 Pazartesi

DBMS_SCHEDULER.CREATE_JOB

Örnek
Şöyle yaparız
DBMS_SCHEDULER.CREATE_JOB (
  job_name        => 'TRACE_OFF_JOB',
  JOB_TYPE        => 'PLSQL_BLOCK',
  JOB_ACTION      => 'DECLARE rowcnt number; BEGIN  SELECT COUNT(*) INTO ROWCNT FROM MY_LOG; IF (ROWCNT >1000000) THEN UPDATE FOO_PROPERTIES SET VALUE = ''OFF'' WHERE KEY = ''DB_TRACE_LEVEL'';
                      END IF; COMMIT; END;',
  start_date      => SYSTIMESTAMP,
  REPEAT_INTERVAL => 'freq=hourly; BYMINUTE=0,20,40; bysecond=0',
  end_date        => NULL,
  ENABLED         => TRUE);

2 Aralık 2021 Perşembe

XMLAGG

Giriş
İki kullanım amacı var
1. XML çıktı almak . XMLTYPE veya XMLELEMENT'lardan bir XML liste oluşturur. 
2. Birden fazla sütunu tek sütunda birleştirmek için

Örnek - XML Çıktı
Şöyle yaparız. XML tag'leri ORDER BY yapılabilir.
 -- Built XML from elements
  SELECT
    XMLAGG(
      XMLTYPE('<employee>' || ename || '</employee>')
      ORDER BY ename)
  FROM emp;
 
  # Result (single row):
  # <employee>ADAMS</employee><employee>ALLEN</employee>...
Örnek - XML Çıktı
Şöyle yaparız. XMLELEMENT FROM içindeki bir alana atıfta bulunur
SELECT XMLELEMENT('Emp', XMLATTRIBUTES('Sales Representative' AS "Title"),
       XMLAGG(XMLELEMENT('Name', full_name)))
FROM
  (
SELECT CONCAT ("FirstName", ' ', "LastName") AS full_name
 FROM ...
 WHERE ...
 ORDER BY 1) AS subq;
_______________________________________________________________________________

<Emp Title="Sales Representative">
  <Name>Anne Dodsworth</Name>
  <Name>Janet Leverling</Name>
  <Name>Margaret Peacock</Name>
  <Name>Michael Suyama</Name>
  <Name>Nancy Davolio</Name>
  <Name>Robert King</Name>
</Emp>
Örnek - Sütun Birleştirme
Şöyle yaparız. XMLELEMENT FROM içindeki alanlara atıfta bulunur. Bunların değerini CONCAT ile birleştirir.
SELECT 
  RTRIM(XMLAGG(
    XMLELEMENT(E,CONCAT(CONCAT(F.Calltype, T.Useridentifiernumber),Fr.Functioncode)|| ',')) .Extract ('//text()'), 
  ',') # remove the last ,
 FROM ...

UPSERT - MERGE INTO

Örnek - Sadece WHEN NOT MATCHED
Şöyle yaparız
MERGE INTO "ORACLE"."POST_DETAILS"
USING
    (SELECT 1 "one" FROM dual)
ON
    ("ORACLE"."POST_DETAILS"."ID" = 1)
WHEN NOT matched THEN
INSERT (
    "ID",
    "CREATED_BY",
    "CREATED_ON"
)
VALUES (
    1,
    'Alice',
    TIMESTAMP '2017-11-06 16:12:18.407'
)
Örnek - WHEN MATCHED + WHEN NOT MATCHED
Şöyle yaparız. Eğer değer varsa UPDATE yoksa INSERT işletilir.
MERGE INTO [target_table]  USING (SELECT 1 FROM DUAL)
ON [target_table.id = 5]
WHEN MATCHED THEN UPDATE ...
WHEN NOT MATCHED THEN INSERT ...
Bunun şöyle yapıldığını da gördüm. Eğer değer yoksa INSERT işletilir.
MERGE INTO ADV.GSRSYS_PROPERTIES D USING DUAL ON (D.key ='GEORED_STATUS')
  WHEN NOT MATCHED THEN INSERT (D.key,D.value) VALUES ('GEORED_STATUS',null);

1 Aralık 2021 Çarşamba

Label Compound Statements - Double Angle Brackets

Örnek
Şöyle yaparız
<<begin_end_block>> 
DECLARE
  ...
BEGIN
  ...
  <<loopblk>> 
  FOR itr8 IN 1 .. 5
  LOOP
    ... 
  END loop loopblk;
END begin_end_block;
/