0

Oracle fonksiyonundan tablo geri dönmek

Posted by Gökhan Şahin on Aug 16, 2011 in Database, Oracle, Yazılım
Öncelikle tablomuzun satırlarını oluşturacak type tipinde bir obje oluşturuyoruz.

create or replace type t_row as object (
col1 NUMBER,
col2 varchar2(10),
);
/

Tablomuzu temsil edecek type tipinde objeyi oluşturuyoruz.


create or replace type t_tbl as table of t_row;/

Tablomuzun içini dolduracak fonksiyonu oluşturuyoruz.

create or replace function fnc_doldur(pkayitSayisi Number) return t_tbl as

v_ret   t_tbl;

begin

for r in 1..pkayitSayisi loop

v_ret.extend;

v_ret(v_ret.count) := t_row(1,'KAYIT'||r);

end loop;

return v_ret;

end;

/

Select çekip tabloyu görebiliriz.

select * from table(fnc_doldur(5));

 
0

Oracle 8i Dumy Kayıt

Posted by Gökhan Şahin on Jun 8, 2011 in Database, Oracle, Yazılım

Oracle 8i veritabanında dumy kayıt oluşturmak için

SELECT LEVEL||' kayit' FROM DUAL CONNECT BY LEVEL <= 10 AND PRIOR DBMS_RANDOM.VALUE IS NOT NULL

 
0

Oracle Veritabanından Ftp Bağlantısı Yapmak.

Posted by Gökhan Şahin on Feb 18, 2011 in Database, Oracle, Yazılım

Oracle veritabanından ftp bağlantısı yapmak için öncelikle aşağıdaki linkten sql dosyasını indiriyoruz.

Ftp Bağlantı Paket Sql

Aşağıdaki kod ile ftp serverdan ls komutunu çalıştırabilirsiniz. Burada önemli olan p_localpath değişkeninde oracle üzerindeki directory kısmındaki dizinlerden çalıştırdığınız kullanıcının yazma yetkisi olan bir dizin olması gerekmektedir.

declare
p_status VARCHAR2 (32000);
p_error_msg VARCHAR2 (32000);
p_elapsed_time VARCHAR2 (100);
p_remote_path VARCHAR2 (2000);
p_local_path VARCHAR2 (2000);
p_hostname VARCHAR2 (100);
p_username VARCHAR2 (100);
p_password VARCHAR2 (100);
p_files VARCHAR2 (4000);
p_bytes_trans NUMBER;
p_trans_start DATE;
p_trans_end DATE;
lbok BOOLEAN;
p_failed CHAR (1) := 'N';
wfile_thk UTL_FILE.file_type;
wsonuc VARCHAR2 (3999) := '';
vnewline VARCHAR2 (255) := '';
BEGIN

--listeleme sonucunu yazacağı dosya
p_files := 'lst.txt';
lbok :=
ftp_interface.ls (p_localpath => 'ORACL_DİZİNİ',
p_filename => p_files,
p_remotepath => 'listelenecek dizin',
p_username => 'kullanici',
p_password => 'şifre',
p_hostname => 'host',
v_status => p_status,
v_error_message => p_error_msg,
n_bytes_transmitted => p_bytes_trans,
d_trans_start => p_trans_start,
d_trans_end => p_trans_end,
p_port => 21,
p_filetype => 'ASCII'
);

IF lbok = TRUE
THEN
wfile_thk := UTL_FILE.fopen ('ORACL_DİZİNİ', 'lst.txt', 'R');

LOOP
BEGIN
UTL_FILE.get_line (wfile_thk, vnewline);
wsonuc := wsonuc || ',' || vnewline;
EXCEPTION
WHEN OTHERS
THEN
EXIT;
END;
END LOOP;

UTL_FILE.fclose (wfile_thk);
RETURN SUBSTR (wsonuc, 2);

IF p_status <> 'SUCCESS'
THEN
p_failed := 'Y';
END IF;
ELSE
-- DBMS_OUTPUT.put_line (p_error_msg);
p_failed := 'Y';
END IF;
-- DBMS_OUTPUT.put_line ( 'FTP PROCESS FAILED := '|| p_failed);
-- DBMS_OUTPUT.put_line ('FINIS');
END;

Put ve get işlemleri için FTP_INTERFACE paketi içinde methodları bulacaksınız.

 
1

Birden fazla alanı Sql sonucuna göre update etmek.

Posted by Gökhan Şahin on Feb 10, 2011 in Database, Oracle
İşçiler tablosundaki adı,soyadı alanlarını Kişiler tablosundaki kayıtların ad ve soyad bilgisi ile güncellemek için güncellenecek alanlar parantez içinde yazılır eşittir konur ve parantez içinde sql cümlesi yazılır dikkat edilecek konu alan sayılarının aynı olması gerekiyor.
update isciler i set (adi,soyadi)=(select adi,soyadi from kisiler k where k.kisi_id=i.kisi_id)

 
0

Oracle Row_Number() fonksiyonu kullanımı

Posted by Gökhan Şahin on Dec 27, 2010 in Database, Oracle, Yazılım

Row_number fonksiyonunu ile col degişkenimiz değiştiğinde 1 den başlayan bir colon elde etmek için


create table tablo(col Varchar2(1));

insert into tablo(COL)VALUES('A');
insert into tablo(COL)VALUES('A');
insert into tablo(COL)VALUES('A');
insert into tablo(COL)VALUES('B');
insert into tablo(COL)VALUES('B');
insert into tablo(COL)VALUES('C');
insert into tablo(COL)VALUES('C');
insert into tablo(COL)VALUES('D');
insert into tablo(COL)VALUES('D');
insert into tablo(COL)VALUES('E');
insert into tablo(COL)VALUES('E');
insert into tablo(COL)VALUES('F');
insert into tablo(COL)VALUES('F');

--Sql imizi çalıştırıp sonucu görelim.
select ROW_NUMBER() OVER(partition by col order by col) AS sira,col from tablo

SIRA COL
——————
1 A
2 A
3 A
1 B
2 B
1 C
2 C
1 D
2 D
1 E
2 E
1 F
2 F

 
0

Oracle Veritabanında Sql ile kayıtları yan yana göstermek

Posted by Gökhan Şahin on Dec 25, 2010 in Database, Oracle, Yazılım

Öncelikle Tablomuzu oluşturalım.

create table tablo(col Varchar2(1));

kayıtlarımızı insert edelim.

insert into tablo(COL)VALUES('A');
insert into tablo(COL)VALUES('B');
insert into tablo(COL)VALUES('C');
insert into tablo(COL)VALUES('D');
insert into tablo(COL)VALUES('E');
insert into tablo(COL)VALUES('F');

Aşağıdaki sql in sonucunda kayıtları yan yana göstermiş olacağız.

select a.col,b.col
from (select rownum a,c.* from (
SELECT mod(rownum,2) indis,col
FROM tablo t)c where indis=1) a,(
select rownum a,c.* from (
SELECT mod(rownum,2) indis,col
FROM tablo t)c where indis=0)b
where a.a=b.a

COL COL_1
——————
A B
C D
E F

 
0

Oracle Dummy Kayıt Oluşturma

Posted by Gökhan Şahin on Dec 21, 2010 in Database, Oracle, Yazılım

Sql ile sanal kayıt oluşturmak için aşağıdaki sql i kullanabilirsiniz.

SELECT ROWNUM AS rn FROM dual CONNECT BY ROWNUM < 5;

çıktısı aşağıdaki olacaktır.
RN
--------------
1
2
3
4

 
1

Oracle Archive Log moduna alma ve çıkarma

Posted by Gökhan Şahin on Dec 16, 2010 in Database, Oracle, Yazılım

Veritabanını kapatıp $ORACLE_HOME/admin/SID/pfile dosyası içinde aşağıdaki kısımları kendinize göre düzeltiyorsunuz.

############################
# Archive Log Destinations -benr(10/15/04)
############################
log_archive_dest_1='location=/u02/oradata/cuddle/archive'
log_archive_start=TRUE

Veritabanın bulunduğu makineye bağlanıp
sqlplus “/as sysdba” yazıp giriyoruz.Aşağıdaki komutları çalıştırıyoruz.

SQL> startup mount
ORACLE instance started.

SQL> alter database archivelog;
Database altered.

SQL> alter database open;
Database altered.

Kapatmak için veritabanını kapatıyoruz.
pfile içindeki
log_archive_start=FALSE
yapıyoruz.
Veritabanın bulunduğu makineye bağlanıp
sqlplus “/as sysdba” yazıp giriyoruz.Aşağıdaki komutları çalıştırıyoruz.

SQL> startup mount
ORACLE instance started.

SQL> alter database noarchivelog;
Database altered.

SQL> alter database open;
Database altered.

 
2

Binary Dosyayı Blob alana atma.

Posted by Gökhan Şahin on Nov 9, 2010 in Database, Oracle, Yazılım

Öncelikle dosyalarımızı alacağımız tabloyu oluşturalım.

create table TABLO_BLOB (ID NUMBER,BLOB_ALAN BOLB);

Daha sonra dosyalarımız çekemizde bize yardımcı olacak. Prosedürümüzü  oluşturalım.

CREATE OR REPLACE PROCEDURE Load_BLOB_From_File (kalsor in varchar2,file_name in varchar2)
AS
src_loc bfile:= bfilename(kalsor,Load_BLOB_From_File.file_name);
dest_loc BLOB;
begin
insert
into TABLO_BLOB values(1,empty_blob()) returning BLOB_ALAN
into dest_loc;
dbms_lob.open(src_loc,DBMS_LOB.LOB_READONLY);
DBMS_LOB.OPEN(dest_loc, DBMS_LOB.LOB_READWRITE);
DBMS_LOB.LOADFROMFILE(dest_lob=> dest_loc,src_lob => src_loc,amount => DBMS_LOB.getLength(src_loc));
DBMS_LOB.CLOSE(dest_loc);
DBMS_LOB.CLOSE(src_loc);
COMMIT;
end;
/


SELECT * FROM dba_directories;

Şimdi yukarıdaki selecti dba yetkisine sahip bir kullanıcı ile çalıştıralım.Veri tabanının bulunduğu makinede “DIRECTORY_PATH” alanındaki yeri bulucaz ve dosyalarımızı buraya atıcaz.daha sonra kullanırken “DIRECTORY_NAME” alanındaki ismi kullanacağız.
Şimdi kodumuzu yazıp çalıştıralım.

Begin
Load_BLOB_From_File ('ADMIN_DIR','dosya_Adı.pdf');
end;

 
1

Oracle Veri tabanındaki tüm tabloların bilgilerini sql ile almak

Posted by Gökhan Şahin on Oct 25, 2010 in Database, Oracle, Yazılım


select * from dba_all_tables

Bu sql ile veritabanındaki bütün tabloları görebilirsiniz.
owner alanından istediğiniz şemanın tablolarına sorgulayabilirsiniz.

Tabloların kolonlarını görmek için aşağıdaki sql’i çalıştırabilirsiniz.

select * from all_tab_cols

Veri tabanındaki tüm objeleri görmek için aşağıdaki sql’i kullanabilirsiniz.
select * from all_objects

Diyelim ki bir şema altındaki tablolara bir user için select hakkı vermek istiyorsunuz.
bunun için ağaşağıdaki sql’i kullanabilirisiniz.
select 'grant select on OWNER.'||table_name||' to USER;' from dba_all_tables where owner='OWNER'
sqldeki Büyük harfle yazılmış olan kısımlardan OWNER yetki vereceğiniz şema USER yetki verilecek Kullanıcı.

Copyright © 2019 Gökhan Şahin All rights reserved. Theme by Laptop Geek.