Tuesday, June 2, 2009

PL/SQL ile ilgili birkaç ufak not

oracle kurulumu ile beraber gelen sql*plus programini kullaniyor iseniz. (windows ortamında command da sqlplus -> sys as sysdba ->parola ) şeklinde giriyorum ben.
orada begin yazdiğinizda sonrasinda 2 rakami gelecektir su anda orada pl/sql komutları yazıyorsunuz demek. Benim şu noktada ilk söyleceğim şey o pl/sql den nasıl çikcağiniz. bu işlem için bir karakter kullanıyorsunuz / (slahs). / ne yaptiğiniza yada ne yazdiğiniza bakmaksizin programi sonlandıracaktır. bu sql yada pl/sql komutu değildir. birkaç deneme yanılma yaparak komut hakkında ayrıntılı bilgi edinebilirsiniz. kendi yaptiğim bazi denemler aşağidadir:
SQL> select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 1250380
Variable Size 234884020
Database Buffers 360710144
Redo Buffers 7135232
//////////////////////////////////////////////////////////
SQL> select * from v$sga
2
SQL>
//////////////////////////////////////////////////////////
SQL> select * from v$sga;
NAME VALUE
-------------------- ----------
Fixed Size 1250380
Variable Size 234884020
Database Buffers 360710144
Redo Buffers 7135232
//////////////////////////////////////////////////////////
SQL> select * from v$sga
2 /
NAME VALUE
-------------------- ----------
Fixed Size 1250380
Variable Size 234884020
Database Buffers 360710144
Redo Buffers 7135232
//////////////////////////////////////////////////////////
SET SERVEROUTPUT ON Komutu ile çikti veren kodlarda çiktiyi ekrana bastırır. Eğer bunu yazmaz iseniz program sorunsuz çalişacaktir fakat erkarana çıktı basmayacaktir.
SET SERVEROUTPUT OFF diyerek kapatiyorsunuz.
SET SERVEROUTPUT ON
BEGIN
DBMS_OUTPUT.PUT_LINE('böle basarlar cıktıyı ekrana işte');
END;
/
/////////////////////////////////////////////////////////////////////////////
NVL Kullanımı örnek
 select * from TestTable;

ID MYNAME MYDATE MYNUMBER
---- ---------- --------- ----------
1 Alison 11-JUL-96 12.12
2 Jason 22-JUN-97 -12.12
3 Smith 13-MAY-98 22.1
4 Tailor 24-JUN-99 -2.12
5 Darlene 15-APR-00

SQL>
SQL> -- NVL: Returns a substitute (some other value) if a value is null.
SQL>
SQL>
SQL> SELECT MyNumber, NVL(MyNumber, 10) From TestTable;

MYNUMBER NVL(MYNUMBER,10)
---------- ----------------
12.12 12.12
-12.12 -12.12
22.1 22.1
-2.12 -2.12
10
/////////////////////////////////////////////////////////////////
ACCEPT VE PROMPT KULLANIMI ÖRNEĞİ
CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
ENAME VARCHAR2(10),
JOB VARCHAR2(9),
MGR NUMBER(4),
HIREDATE DATE,
SAL NUMBER(7, 2),
COMM NUMBER(7, 2),
DEPTNO NUMBER(2));

INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK', 7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20);
INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30);
INSERT INTO EMP VALUES (7521, 'WARD', 'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER', 7839, TO_DATE('2-APR-1981', 'DD-MON-YYYY'), 2975, NULL, 20);
INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);
INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30);
INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10);
INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);
INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30);
INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20);
INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30);
INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20);
INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);

--tabloyu yarattık
--ekrandan öğrenci numarasını girelim.
SQL> ACCEPT p_emp NUMBER PROMPT "öğrenci munarasını giriniz"
öğrenci munarasını giriniz7934
DECLARE
myName VARCHAR2(30);
BEGIN
SELECT ename
INTO myName
FROM emp
WHERE empno = &p_emp;

DBMS_OUTPUT.PUT_LINE('öğrencinin adı '||myName);
END;
/
Employee Name is MILLER --cıktısını alırız.

No comments: