Orhan AKDOĞAN > Oracle

Oracle – Dynamic Cursor SQL

CREATE OR REPLACE PROCEDURE query_invoice(
       month VARCHAR2,
       year VARCHAR2) IS
    TYPE cur_typ IS REF CURSOR;
    c cur_typ;
    query_str VARCHAR2(200);
    inv_num NUMBER;
    inv_cust VARCHAR2(20);
    inv_amt NUMBER;
BEGIN
    query_str := 'SELECT num, cust, amt FROM inv_' || month ||'_'|| year
      || ' WHERE invnum = :id';
    OPEN c FOR query_str USING inv_num;
    LOOP
        FETCH c INTO inv_num, inv_cust, inv_amt;
        EXIT WHEN c%NOTFOUND;
        -- process row here
    END LOOP;
    CLOSE c;
END;

SQL Developer -”ORA-01882: timezone region not found” Hatası

SQL Developer da alınan “ORA-01882: timezone region not found” Hatasını gidermek için;
Sqldeveloper kurulum dizinine gidip;
sqldeveloper\sqldeveloper\bin\sqldeveloper.conf
yolundaki dosyayı notepad ile açıp
satır sonuna
AddVMOption -Duser.timezone=”+01:00″

Değerini ekleyip tekrar denemeliyiz.

Oracle – Satırları virgülle ayrılmış tek satır olarak getirmek

SELECT table_name "Tablo Adı" , wmsys.wm_concat(column_name) "Kolon Listesi"
FROM all_tab_columns
WHERE table_name='TBLSTSABIT' -- Tablo adını yazıyoruz.
and rownum<20  --ilk 20 kolonu
GROUP BY table_name

Oracle – Object Creation and Modification Dates

SELECT   owner, object_name, TO_CHAR (created, 'YYYY-MM-DD hh:mi:ss') created,
         TO_CHAR (last_ddl_time, 'YYYY-MM-DD hh:mi:ss') modified, object_type
FROM dba_objects
WHERE owner LIKE UPPER ('XTablespace')
ORDER BY created,modified DESC

Oracle – Table Columns Report

SELECT   a.owner,    table_name  || ' '  || object_type table_name, column_name,
         data_type, data_length, DECODE (nullable, 'N', 'NO', 'YES') nullable
    FROM dba_tab_columns a, dba_objects b
   WHERE a.owner NOT IN ('SYS', 'SYSTEM')
   AND a.owner = UPPER ('Xtablespace')
     AND a.owner = b.owner
     AND a.table_name LIKE UPPER ('Xtablename')
     AND a.table_name = b.object_name
     AND object_type IN ('TABLE', 'VIEW', 'CLUSTER')
ORDER BY owner, object_type, table_name, column_id

Oracle – Tablo İstatistikleri

Tablo satır adetleri vb. bilgileri izleyebilirsiniz.

SELECT   owner, table_name, tablespace_name, num_rows, blocks, empty_blocks,
         avg_row_len, sample_size, last_analyzed
FROM dba_tables
WHERE UPPER (owner) LIKE 'xxx'
ORDER BY owner, table_name

Oracle – For Update

Select sonuna yazılarak kullanılır.Seçilen kayıtlara, commit veya rollback yapılana kadar DML işlemi yapılmasını engeller.
Yani bu kayıtlara lock koyulur.

SELECT * FROM tblfatuirs WHERE fatirs_no= 'DN0000012345' FOR UPDATE;

Oracle – PL/SQL Regular Expression

PL/SQL içerisinde işleri kolaylaştıran pek çok regular expression ifadesi bulunuyor.
“REGEXP_” ile başlayan bu ifadelerden biri de REGEXP_REPLACE dir.

Aşağıdaki örnekde REGEXP_REPLACE ile, ilgili alanın içinden yalnızca sayıları alıyoruz.

REGEXP_REPLACE(table.field,'[^0-9]')

PL/SQL Regular Expression komutları hakkında daha detaylı bilgiye aşağıdaki linkten ulaşabilirsiniz.

http://psoug.org/reference/regexp.html

 

Oracle – PL/SQL ile Mail Gönderme

--Öncelikle göndermek için gereken yetkileri tanımlıyoruz,
--1
BEGIN
dbms_network_acl_admin.create_acl (
acl => 'cahari.xml',
description => 'mai atmak için',
principal => 'tablespace yazın',
is_grant => true,
privilege => 'connect',
start_date => null,
end_date => null
);
END;

--2
begin
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(acl => 'cahari.xml',
principal => 'tablespace yazın',
is_grant => true,
privilege => 'resolve');
end;

--3
begin
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(acl => 'cahari.xml',
host => 'Buraya host ip yi yazıyoruz.');
end;

--4
--Procedure yaratılıyor
create or replace
PROCEDURE MailGonder
( sender IN VARCHAR2,
recipient IN VARCHAR2,
subject IN VARCHAR2,
message IN VARCHAR2)
IS
mailhost VARCHAR2(30) := '10.10.13.253';
mail_conn utl_smtp.connection;
crlf VARCHAR2( 2 ):= CHR( 13 ) || CHR( 10 );
mesg VARCHAR2( 1000 );

BEGIN
mail_conn := utl_smtp.open_connection(mailhost, 25);

mesg:= 'Date: ' || TO_CHAR( SYSDATE, 'dd Mon yy hh24:mi:ss' ) || crlf
||
'From: <'||sender||'>' || crlf ||
'Subject: '||subject || crlf ||
'To: '||recipient || crlf ||
''||crlf||
'MIME-Version: 1.0'||crlf|| message;

utl_smtp.helo(mail_conn, mailhost);
utl_smtp.mail(mail_conn, sender);
utl_smtp.rcpt(mail_conn, recipient);
utl_smtp.data(mail_conn, mesg);
utl_smtp.quit(mail_conn);

Exception
WHEN OTHERS THEN
raise_application_error(-20002,'Mail Gönderilemedi'||SQLERRM);
END;

--5
--Kullanım şekli
Begin
MailGonder('orhan@mail.com','orhan@mail.com','Konu','Deneme mesajı');
End;