Oracle etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
Oracle etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

15 Mart 2018 Perşembe

Creation of JSON object with APEX_JSON package

BEGIN
    APEX_JSON.initialize_clob_output;
    apex_json.open_object;        -- {
    apex_json.write('a', 1);    --   "a":1
    apex_json.open_array('b');  --  ,"b":[
    apex_json.open_object;    --    {
    apex_json.write('c',2); --      "c":2
    apex_json.close_object;   --    }
    apex_json.write('hello'); --   ,"hello"
    apex_json.write('world'); --   ,"world"
    apex_json.close_all;          --  ]
                          -- }
    DBMS_OUTPUT.put_line(APEX_JSON.get_clob_output);
    APEX_JSON.free_output;                     
END; 

11 Ağustos 2016 Perşembe

Oracle Apex - Shuttle için where clause

Shuttle nesnesi kullanırken aşağıdaki where cümleciği örneğini kullanabilirsiniz.

 select .....   
 from ......  
 where  
 ..... önceki koşullarınız.....   
 and  
 (  
   :P1_MY_SHUTTLE is not null and  
   (instr(':'||:P1_MY_SHUTTLE ||':',':'|| f.component_id||':',1) > 0 )   
 )  

Oracle Apex - Shuttle item için genişliğin değiştirilmesi

Bazı durumlarda shuttle nesnesinin genişliğini değiştirmek gerekibiliyor.
Bunu yapmak için shuttle item için edit butonuna bastıktan sonra
"HTML Form Element Attributes" özelliğini aşağıdakine benzer
şekilde değiştirebilirsiniz.


 HTML Form Element Attributes: style="width:250px"  

Bir kolon içerisinde tekrarlayan verinin tekilleştirilmesi (distinct)

Önce
------------------------------
 select group_id,   
     listagg(name, ',') within group (order by name) as names  
 from demotable  
 group by group_id   

 group_id names  
 -------- -----  
 1     'Alan, David, David, John'  
 2     'Charles, Julie'  
Sonra
------------------------------

 select group_id,   
 regexp_replace(  
   listagg(name, ',') within group (order by name)  
   ,'([^,]+)(,\1)+', '\1')  
 from demotable  
 group by group_id;   

 group_id names  
 -------- -----  
 1     'Alan, David, John'  
 2     'Charles, Julie'  

4 Şubat 2016 Perşembe

Security - Best Practises (Oracle - Linux vs)

Güvenlik konusunda ücretsiz olarak erişebileceğiniz
best practise dökümanlarına aşağıdaki linkten ulaşabilirsiniz.
(Oracle 11g,Oracle 12c, Mysql, DB2, Linux 6, VmWare, Apache, IIS vs. )

Örnek Döküman
-------------------------
CIS Oracle Database Server 11g R2 Benchmark v2.1.0
Release Date: Mon Nov 30 10:15:44 2015
https://benchmarks.cisecurity.org/downloads/show-single/?file=oracle11gR2.210

This document is intended to address the recommended security settings for Oracle Database 11g R2. This guide was tested against Oracle 11g R2 (11.2.0.4) running on a Windows Server 2012 R2 instance as a stand-alone system, and running on an Oracle Linux 6.5 instance also as a stand-alone system. Future Oracle 11g R2 critical patch updates (CPUs) may impact the recommendations included in this document.

https://benchmarks.cisecurity.org/downloads/browse/index.cfm?category=benchmarks.servers

3 Şubat 2016 Çarşamba

Ön tanımlama gerekmeyen cursor loop

Genellikle cursor loop gerektiğinde aşağıdaki yapıyı kullanıyorum.
Hem kod okunurluğunu arttırıyor hem de daha kolay bir kullanımı var.
 DECLARE  
  BEGIN  
  /* Open up a cursor for loop, also selecting  
  * the "p" function which will write rows to  
  * t2 for every row fetched from t1. */  
  FOR crec IN (SELECT tcol, p(tcol) FROM t1) LOOP  
   -- Break out of the loop immediately  
   EXIT;  
  END LOOP;  
 END;  

Daha fazla bilgi için aşağıdaki adresi inceleyebilirsiniz.
http://psoug.org/reference/control_struct.html

Tek satırdaki ve belirli bir ayıraç ile ayrılmış verinin çok satırlı hale dönüştürülmesi(Connect By)

Aşağıda "," ayracı ile ayrılmış olan "abcd,123,defoifcd,87765" verisi
virgülle ayrılmış her bir veri ayrı bir satır olacak şekilde görüntülenmektedir.
 SQL> with t as (select 'abcd,123,defoifcd,87765' as str from dual)  
 select level as n, regexp_substr(str,'[^,]+',1,level) as val  
 from  t  
 connect by regexp_substr(str,'[^,]+',1,level) is not null ;  
      N VAL  
 ---------- ------------------------------  
      1 abcd  
      2 123  
      3 defoifcd  
      4 87765  
 SQL>  

Birden fazla satır içeren verinin tek satırda gösterilmesi (LISTAGG)

 select  
   deptno,  
   listagg (ename, ',')   
 WITHIN GROUP   
 (ORDER BY ename) enames  
 FROM   
   emp  
 GROUP BY   
   deptno  
 /   


Komut çıktısı aşağıdaki gibi olacaktır.
   DEPTNO ENAMES                        
 ---------- --------------------------------------------------  
     10 CLARK,KING,MILLER                   
     20 ADAMS,FORD,JONES,SCOTT,SMITH          
     30 ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD    

sqlplus ile yapılan işler için log oluşturma

ECHO {OFF|ON} : Çalıştırılmış olan komutu görüntüler. SPOOL : Çıktıyı belitilen dosyaya yazar.
 SQL> set echo on  
 SQL> SPOOL test.log  
 SQL> select 1 from dual;  
      1  
 ----------  
      1  
 SQL>  
Sonra test.log dosyası içine "cat" komutu ile baktığımızda çıktıyı görebiliriz.
 -bash-3.2$ cat test.log  
 SQL> select 1 from dual;  
      1  
 ----------  
      1  
 SQL>  
 SQL>  
 SQL> exit  
 -bash-3.2$  

12 Eylül 2014 Cuma

OEL 5.5 üzerinde Apex 4.1 'den 4.2' ye upgrade

1) Apex 4.2, aşağıdaki adresten download edilir.

http://www.oracle.com/technetwork/developer-tools/apex/downloads/index.html

2) Download edilen apex4.2.5.zip istenilen bir klasöre açılır.

3) Zip dosyanın açıldığı klasörde apexins.sql dosyası çalıştırılır.

sqlplus ile sys user kullanılarak bağlanılmalıdır.
apexins.sql dışarıdan 4 parametre alır : APEX user için kullanılacak tablaspace, FLOWS_FILES user için kullanılacak tablespace,TEMP tablespace, image klasörünün ismi.

$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Jan 3 11:21:39 2013
 
Copyright (c) 1982, 2011, Oracle. All rights reserved.
 
SQL> @apexins.sql APEX APEX TEMP /i/

Benim makinemde komutun tamamlanması 16 dk. sürdü.
Sonrasında “APEX_040200″ kullanıcısının oluştuğunu görebilirsiniz.

4) Upgrade sonrası kontrol

Kurulum sonrası aşağıdaki query sonucu "VALID" olmalıdır.

$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.3.0 Production on Thu Jan 3 11:21:39 2013
 
Copyright (c) 1982, 2011, Oracle. All rights reserved.
 
SQL> select status from dba_registry where comp_id='APEX';
 
STATUS
-------------------------------------------------------
VALID

5) Image klasörünün ayarlanması

Kurulum sonrası, eski apex kurulumunuzun bulunduğu klasörün ismini değiştirin ve
yeni apex klasörünüzü buraya taşıyarak aynı ismi verin.
Sonrasında eski apex/images klasörünüzde bulunan manual yüklediğiniz resim dosyalarınızı
yeni apex/images klasörünüze kopyalayın.

6) Eğer Oracle 11g kullanıyorsanız ve mail atma gibi aksiyonlarınız varsa
ilgili network yetkileri “APEX_040200″ user için verilmelidir.

Aşağıdaki sql scripti sys user ile çalıştırılmalıdır.

DECLARE
ACL_PATH VARCHAR2(4000);
BEGIN
-- Look for the ACL currently assigned to '*' and give APEX_040200
-- the "connect" privilege if APEX_040200 does not have the privilege yet.
SELECT ACL INTO ACL_PATH FROM DBA_NETWORK_ACLS
WHERE HOST = '*' AND LOWER_PORT IS NULL AND UPPER_PORT IS NULL;
IF DBMS_NETWORK_ACL_ADMIN.CHECK_PRIVILEGE(ACL_PATH, 'APEX_040200',
'connect') IS NULL THEN
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(ACL_PATH,
'APEX_040200', TRUE, 'connect');
END IF;
EXCEPTION
-- When no ACL has been assigned to '*'.
WHEN NO_DATA_FOUND THEN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml',
'ACL that lets power users to connect to everywhere',
'APEX_040200', TRUE, 'connect');
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
END;
/
COMMIT;

Bu blog yazısını hazırlarken gerçekleştirdiğim upgrade
deneyimi yanısıra aşağıdaki adresten yararlandım.
İncelemeniz faydalı olabilir. 

https://matthiashoys.wordpress.com/tag/apexins-sql/