PLSQL Day3
PLSQL Day3
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 TYPE TAB1 IS TABLE OF DEPT
3 INDEX BY BINARY_INTEGER;
4 T TAB1;
5 BEGIN
6 FOR I IN 1..4
7 LOOP
8 SELECT * INTO T(I) FROM DEPTNO=DNO;
9 DNO:=DNO+10;
10 END LOOP;
11 FOR I IN 1..4
12 LOOP
13 DBMS_OUTPUT.PUT_LINE(T(I).DNAME);
14 END LOOP;
15* END;
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 DNO NUMBER:=10;
3 TYPE TAB1 IS TABLE OF DEPT
4 INDEX BY BINARY_INTEGER;
5 T TAB1;
6 BEGIN
7 FOR I IN 1..4
8 LOOP
9 SELECT * INTO T(I) FROM DEPTNO=DNO;
10 DNO:=DNO+10;
11 END LOOP;
12 FOR I IN 1..4
13 LOOP
14 DBMS_OUTPUT.PUT_LINE(T(I).DNAME);
15 END LOOP;
16* END;
SCOTT>>/
SELECT * INTO T(I) FROM DEPTNO=DNO;
*
ERROR at line 9:
ORA-06550: line 9, column 35:
PL/SQL: ORA-00933: SQL command not properly ended
ORA-06550: line 9, column 5:
PL/SQL: SQL Statement ignored
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 DNO NUMBER:=10;
3 TYPE TAB1 IS TABLE OF DEPT
4 INDEX BY BINARY_INTEGER;
5 T TAB1;
6 BEGIN
7 FOR I IN 1..4
8 LOOP
9 SELECT * INTO T(I) FROM DEPT WHERE DEPTNO=DNO;
10 DNO:=DNO+10;
11 END LOOP;
12 FOR I IN 1..4
13 LOOP
14 DBMS_OUTPUT.PUT_LINE(T(I).DNAME);
15 END LOOP;
16* END;
SCOTT>>/
TYPE TAB1 IS TABLE OF DEPT
*
ERROR at line 3:
ORA-06550: line 3, column 23:
PLS-00488: 'DEPT' must be a type
ORA-06550: line 3, column 1:
PL/SQL: Item ignored
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 DNO NUMBER:=10;
3 TYPE TAB1 IS TABLE OF DEPT%ROWTYPE
4 INDEX BY BINARY_INTEGER;
5 T TAB1;
6 BEGIN
7 FOR I IN 1..4
8 LOOP
9 SELECT * INTO T(I) FROM DEPT WHERE DEPTNO=DNO;
10 DNO:=DNO+10;
11 END LOOP;
12 FOR I IN 1..4
13 LOOP
14 DBMS_OUTPUT.PUT_LINE(T(I).DNAME);
15 END LOOP;
16* END;
SCOTT>>/
ACCOUNTING
RESEARCH
SALES
OPERATIONS
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 DNO NUMBER:=10;
3 TYPE TAB1 IS TABLE OF DEPT%ROWTYPE
4 INDEX BY BINARY_INTEGER;
5 T TAB1;
6 BEGIN
7 FOR I IN 1..4
8 LOOP
9 SELECT * INTO T(I) FROM DEPT WHERE DEPTNO=DNO;
10 DNO:=DNO+10;
11 END LOOP;
12 FOR I IN 1..4
13 LOOP
14 DBMS_OUTPUT.PUT_LINE(T(I).DNAME);
15 END LOOP;
16* END;
SCOTT>>/
ACCOUNTING
RESEARCH
SALES
OPERATIONS
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 DNO NUMBER:=10;
3 TYPE TAB1 IS TABLE OF DEPT%ROWTYPE
4 INDEX BY BINARY_INTEGER;
5 T TAB1;
6 BEGIN
7 FOR I IN 1..4
8 LOOP
9 SELECT * INTO T(I) FROM DEPT WHERE DEPTNO=DNO;
10 DNO:=DNO+10;
11 END LOOP;
12 FOR I IN 1..4
13 LOOP
14 DBMS_OUTPUT.PUT_LINE(T(I).DNAME);
15 END LOOP;
16* END;
SCOTT>>/
ACCOUNTING
RESEARCH
SALES
OPERATIONS
PL/SQL procedure successfully completed.
SCOTT>>CL SCR
SCOTT>>BEGIN
2 .
SCOTT>>DESC NEW
Name Null? Type
----------------------------------------- -------- ---------------------
-------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
COUNT(*)
----------
14
SCOTT>>CL SCR
SCOTT>>BEGIN
2 DELETE NEW WHERE JOB='CLERK'
3 END;
4 //
5 .
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 DELETE NEW WHERE JOB='CLERK';
3* END;
4 /
no rows selected
SCOTT>>ROLLBACK;
Rollback complete.
SCOTT>>CL SCR
SCOTT>>BEGIN
2 DELETE NEW WHERE JOB='CLERK';
3 DBMS_OUTPUT.PUT_LINE(SQL%ROWCOUNT);
4 END;
5 /
4
SCOTT>>/
0
SCOTT>>DECLARE
2 N NUMBER;
3 BEGIN
4 UPDATE EMP SET SAL=SAL+1000 WHERE JOB='MANAGER';
5 N:=SQL%ROWCOUNT;
6 DBMS_OUTPUT.PUT_LINE('NO OF ROWS'||N);
7 END;
8 /
NO OF ROWS3
SCOTT>>
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 N NUMBER;
3 BEGIN
4 UPDATE EMP SET SAL=SAL+1000 WHERE DEPTNO=89;
5 N:=SQL%ROWCOUNT;
6 DBMS_OUTPUT.PUT_LINE('NO OF ROWS'||N);
7* END;
SCOTT>>/
NO OF ROWS0
PL/SQL procedure successfully completed.
SCOTT>>
SCOTT>>
SCOTT>>
SCOTT>>
SCOTT>>
SCOTT>>
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 N NUMBER;
3 BEGIN
4 UPDATE EMP SET SAL=SAL+1000 WHERE DEPTNO=89;
5 N:=SQL%ROWCOUNT;
6 DBMS_OUTPUT.PUT_LINE('NO OF ROWS'||N);
7* END;
SCOTT>>CL SCR
SCOTT>>DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 OBJ EMP_CUR%ROWTYPE;
4 BEGIN
5 OPEN EMP_CUR;
6 FETCH EMP_CUR INTO OBJ;
7 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
8 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
9 CLOSE EMP_CUR;
10 END;
11 /
SMITH
1
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 OBJ EMP_CUR%ROWTYPE;
4 BEGIN
5 OPEN EMP_CUR;
6 LOOP
7 FETCH EMP_CUR INTO OBJ;
8 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
9 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
10 END LOOP;
11 CLOSE EMP_CUR;
12* END;
13 /
DECLARE
*
ERROR at line 1:
ORA-04030: out of process memory when trying to allocate 16396 bytes
(koh-kghu
sessi,pl/sql vc2)
SCOTT>>conn scott/tiger
Connected.
SCOTT>>DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 OBJ EMP_CUR%ROWTYPE;
4 BEGIN
5 OPEN EMP_CUR;
6 FETCH EMP_CUR INTO OBJ;
7 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
8 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
9 CLOSE EMP_CUR;
10 END;
11 /
SCOTT>>set serveroutput on
SCOTT>>/
SMITH
1
SCOTT>>ed
Wrote file afiedt.buf
1 DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 OBJ EMP_CUR%ROWTYPE;
4 BEGIN
5 OPEN EMP_CUR;
6 LOOP
7 FETCH EMP_CUR INTO OBJ;
8 IF(EMP_CUR%FOUND) THEN
9 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
10 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
11 ELSE
12 EXIT;
13 END LOOP;
14 CLOSE EMP_CUR;
15* END;
SCOTT>>/
END LOOP;
*
ERROR at line 13:
ORA-06550: line 13, column 5:
PLS-00103: Encountered the symbol "LOOP" when expecting one of the
following:
if
ORA-06550: line 15, column 4:
PLS-00103: Encountered the symbol "end-of-file" when expecting one of the
following:
end not pragma final instantiable order overriding static
member constructor map
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 OBJ EMP_CUR%ROWTYPE;
4 BEGIN
5 OPEN EMP_CUR;
6 LOOP
7 FETCH EMP_CUR INTO OBJ;
8 IF(EMP_CUR%FOUND) THEN
9 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
10 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
11 ELSE
12 EXIT;
13 END IF;
14 END LOOP;
15 CLOSE EMP_CUR;
16* END;
SCOTT>>/
SMITH
1
JONES
2
SCOTT
3
ADAMS
4
FORD
5
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 OBJ EMP_CUR%ROWTYPE;
4 BEGIN
5 OPEN EMP_CUR;
6 IF(EMP_CUR%ISOPEN) THEN
7 DBMS_OUTPUT.PUT_LINE('ALREADY OPENED');
8 ELSE
9 OPEN EMP_CUR;
10 END IF;
11 LOOP
12 FETCH EMP_CUR INTO OBJ;
13 IF(EMP_CUR%FOUND) THEN
14 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
15 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
16 ELSE
17 EXIT;
18 END IF;
19 END LOOP;
20 CLOSE EMP_CUR;
21* END;
SCOTT>>/
ALREADY OPENED
SMITH
1
JONES
2
SCOTT
3
ADAMS
4
FORD
5
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 OBJ EMP_CUR%ROWTYPE;
4 BEGIN
5 -- OPEN EMP_CUR;
6 IF(EMP_CUR%ISOPEN) THEN
7 DBMS_OUTPUT.PUT_LINE('ALREADY OPENED');
8 ELSE
9 OPEN EMP_CUR;
10 END IF;
11 LOOP
12 FETCH EMP_CUR INTO OBJ;
13 IF(EMP_CUR%FOUND) THEN
14 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
15 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
16 ELSE
17 EXIT;
18 END IF;
19 END LOOP;
20 CLOSE EMP_CUR;
21* END;
SCOTT>>/
SMITH
1
JONES
2
SCOTT
3
ADAMS
4
FORD
5
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR EMP_CUR IS SELECT * FROM EMP WHERE DEPTNO=20;
3 BEGIN
4 FOR OBJ IN EMP_CUR
5 LOOP
6 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
7 DBMS_OUTPUT.PUT_LINE(EMP_CUR%ROWCOUNT);
8 END LOOP;
9* END;
10 /
SMITH
1
JONES
2
SCOTT
3
ADAMS
4
FORD
5
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR OBJ IN (SELECT * FROM EMP WHERE DEPTNO=20)
3 LOOP
4 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
5 END LOOP;
6* END;
SCOTT>>/
SMITH
JONES
SCOTT
ADAMS
FORD
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR OBJ IN (SELECT ENAME,DNAME FROM EMP,DEPT WHERE
EMP.DEPTNO=DEPT.DEPTNO)
3 LOOP
4 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME);
5 DBMS_OUTPUT.PUT_LINE(OBJ.DNAME);
6 END LOOP;
7* END;
SCOTT>>/
CLARK
ACCOUNTING
KING
ACCOUNTING
MILLER
ACCOUNTING
JONES
RESEARCH
FORD
RESEARCH
ADAMS
RESEARCH
SMITH
RESEARCH
SCOTT
RESEARCH
WARD
SALES
TURNER
SALES
ALLEN
SALES
JAMES
SALES
BLAKE
SALES
MARTIN
SALES
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR OBJ IN (SELECT ENAME,DNAME FROM EMP,DEPT WHERE
EMP.DEPTNO=DEPT.DEPTNO)
3 LOOP
4 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME||' '||OBJ.DNAME);
5 END LOOP;
6* END;
7 /
CLARK ACCOUNTING
KING ACCOUNTING
MILLER ACCOUNTING
JONES RESEARCH
FORD RESEARCH
ADAMS RESEARCH
SMITH RESEARCH
SCOTT RESEARCH
WARD SALES
TURNER SALES
ALLEN SALES
JAMES SALES
BLAKE SALES
MARTIN SALES
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR OBJ IN (SELECT ENAME,DNAME FROM EMP,DEPT WHERE
EMP.DEPTNO=DEPT.DEPTNO)
3 LOOP
4 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME||' '||OBJ.DNAME);
5 END LOOP;
6* END;
SCOTT>>/
CLARK ACCOUNTING
KING ACCOUNTING
MILLER ACCOUNTING
JONES RESEARCH
FORD RESEARCH
ADAMS RESEARCH
SMITH RESEARCH
SCOTT RESEARCH
WARD SALES
TURNER SALES
ALLEN SALES
JAMES SALES
BLAKE SALES
MARTIN SALES
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR OBJ IN (SELECT ENAME,DNAME FROM EMP,DEPT WHERE
EMP.DEPTNO=DEPT.DEPTNO)
3 LOOP
4 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME||' '||OBJ.DNAME);
5 END LOOP;
6* END;
SCOTT>>/
CLARK ACCOUNTING
KING ACCOUNTING
MILLER ACCOUNTING
JONES RESEARCH
FORD RESEARCH
ADAMS RESEARCH
SMITH RESEARCH
SCOTT RESEARCH
WARD SALES
TURNER SALES
ALLEN SALES
JAMES SALES
BLAKE SALES
MARTIN SALES
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR OBJ IN (SELECT ENAME,DNAME FROM EMP,DEPT
3 WHERE EMP.DEPTNO=DEPT.DEPTNO AND EMP.DEPTNO=20)
4 LOOP
5 DBMS_OUTPUT.PUT_LINE(OBJ.ENAME||' '||OBJ.DNAME);
6 END LOOP;
7* END;
SCOTT>>/
SMITH RESEARCH
JONES RESEARCH
SCOTT RESEARCH
ADAMS RESEARCH
FORD RESEARCH
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR CUR IS SELECT * FROM EMP WHERE DEPTNO=10;
3 BEGIN
4 FOR OBJ IN CUR
5 LOOP
6 UPDATE EMP SET SAL=SAL+1000 WHERE DEPTNO=10;
7 DBMS_OUTPUT.PUT_LINE(CUR%ROWCOUNT||SQL%ROWCOUNT);
8 END LOOP;
9* END;
SCOTT>>/
13
23
33
SAL
----------
5450
8000
4300
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR CUR IS SELECT * FROM EMP WHERE DEPTNO=10 FOR UPDATE;
3 BEGIN
4 FOR OBJ IN CUR
5 LOOP
6 UPDATE EMP SET SAL=SAL+1000 WHERE CURRENT OF CUR;
7 DBMS_OUTPUT.PUT_LINE(CUR%ROWCOUNT||' '||SQL%ROWCOUNT);
8 END LOOP;
9* END;
SCOTT>>/
1 1
2 1
3 1
SAL
----------
6450
9000
5300
SCOTT>>ED
Wrote file afiedt.buf
Rollback complete.
EMPNO ENAME
---------- ----------
7369 SMITH
7499 ALLEN
7521 WARD
7566 JONES
7654 MARTIN
7698 BLAKE
7782 CLARK
7788 SCOTT
7839 KING
7844 TURNER
7876 ADAMS
EMPNO ENAME
---------- ----------
7900 JAMES
7902 FORD
7934 MILLER
14 rows selected.
SCOTT>> DECLARE
2 CURSOR CUR IS SELECT * FROM EMP WHERE DEPTNO=10 FOR UPDATE;
3 BEGIN
4 FOR OBJ IN CUR
5 LOOP
6 UPDATE EMP SET SAL=SAL+1000 WHERE CURRENT OF CUR;
7 DBMS_OUTPUT.PUT_LINE(CUR%ROWCOUNT||' '||SQL%ROWCOUNT);
8 END LOOP;
9 END;
10 .
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR CUR IS SELECT * FROM EMP FOR UPDATE;
3 I NUMBER:=1;
4 BEGIN
5 FOR OBJ IN CUR
6 LOOP
7 IF(I=1 OR I=4) THEN
8 DELETE EMP WHERE CURRENT OF CUR;
9 ELSE
10 UPDATE EMP SET SAL=SAL+1000 WHERE CURRENT OF CUR;
11 END IF;
12 I:=I+1;
13 END LOOP;
14* END;
SCOTT>>/
SCOTT>>ED
Wrote file afiedt.buf
1 DECLARE
2 CURSOR CUR IS SELECT * FROM EMP FOR UPDATE;
3 I NUMBER:=1;
4 BEGIN
5 FOR OBJ IN CUR
6 LOOP
7 IF(I=1 OR I=4) THEN
8 DELETE EMP WHERE CURRENT OF CUR;
9 ELSE
10 UPDATE EMP SET SAL=SAL+1000 WHERE CURRENT OF CUR;
11 END IF;
12 I:=I+1;
13 END LOOP;
14* END;
SCOTT>>SELECT EMPNO,ENAME,SAL FROM EMP;
12 rows selected.
SCOTT>>ED 'C:\CURSOR'
SCOTT>>ED 'C:\CURSOR.SQL'
SCOTT>>CL SCR
Table created.
SCOTT>>BEGIN
2 .
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR I IN 1..10
3 LOOP
4 IF(I=3 OR I=7) THEN
5 ROLLBACK;
6 ELSE
7 INSERT INTO SEP VALUES(123);
8 END IF;
9* END;
10 /
END;
*
ERROR at line 9:
ORA-06550: line 9, column 4:
PLS-00103: Encountered the symbol ";" when expecting one of the
following:
loop
SCOTT>>ED
Wrote file afiedt.buf
1 BEGIN
2 FOR I IN 1..10
3 LOOP
4 IF(I=3 OR I=7) THEN
5 ROLLBACK;
6 ELSE
7 INSERT INTO SEP VALUES(123);
8 END IF;
9 END LOOP;
10* END;
SCOTT>>/
ID
----------
123
123
123
SCOTT>>SPOOL OFF
SAL
----------
3450
6000
2300
SCOTT>>DECLARE
2 CURSOR C IS SELECT * FROM EMP WHERE DEPTNO=10;
3 BEGIN
4 FOR S IN C
5 LOOP
6 UPDATE EMP SET SAL=SAL+1000 WHERE DEPTNO=10;
7 END LOOP;
8 END;
9 /
SCOTT>>ROLLBACK;
Rollback complete.
SCOTT>>DECLARE
2 CURSOR C IS SELECT * FROM EMP WHERE DEPTNO=10 FOR UPDATE;
3 BEGIN
4 FOR S IN C
5 LOOP
6 UPDATE EMP SET SAL=SAL+1000 WHERE CURRENT OF C;
7 END LOOP;
8 END;
9 /
SAL
----------
4450
7000
3300
SCOTT>>ROLLBACK;
Rollback complete.
SCOTT>>