11-1:
	set serveroutput on
	BEGIN
	  dbms_output.put_line('Hello,everyone!');
	END;
	/
11-2:
	set verify off
	DECLARE
	  v_ename VARCHAR2(5);
	BEGIN
	  SELECT ename INTO v_ename FROM emp
	  WHERE empno=&no;
	  dbms_output.put_line('Ա:'||v_ename);
	END;
	/
11-3:
	DECLARE
	  v_ename VARCHAR2(5);
	BEGIN
	  SELECT ename INTO v_ename FROM emp
	  WHERE empno=&no;
	  dbms_output.put_line('Ա:'||v_ename);
	EXCEPTION
	  WHEN NO_DATA_FOUND THEN
	    dbms_output.put_line('ȷĹԱţ');
	END;
	/
11-4:
	DECLARE
	  v_avgsal NUMBER(6,2);
	BEGIN
	  SELECT avg(sal) INTO v_avgsal FROM emp
	  WHERE deptno=&no;
	  dbms_output.put_line('ƽ:'||v_avgsal);
	END;
	/
11-5:
	<<outer>>
	DECLARE
	  v_deptno NUMBER(2);
	  v_dname  VARCHAR2(10);
	BEGIN
	  <<inner>>
	  BEGIN
	    SELECT deptno INTO v_deptno FROM emp
	    WHERE lower(ename)=lower('&name');
	  END;--<<inner>>
	  SELECT dname INTO v_dname FROM dept
	  WHERE deptno=v_deptno;
	  dbms_output.put_line(':'||v_dname);
	END; -- <<outer>>
	/
11-6:
	CREATE PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)
	IS
	BEGIN
	  UPDATE emp SET sal=newsal
	  WHERE lower(ename)=lower(name);
	END;
	/
	exec update_sal('scott',2000)
11-7:
	CREATE FUNCTION annual_income(name VARCHAR2)
	RETURN NUMBER IS
	  annual_salary NUMBER(7,2);
	BEGIN
	  SELECT sal*12+nvl(comm,0) INTO annual_salary
	  FROM emp WHERE lower(ename)=lower(name);
	  RETURN annual_salary;
	END;
	/
	SELECT annual_income('scott')  FROM dual;
11-8:
	CREATE PACKAGE emp_pkg IS
	  PROCEDURE update_sal(name VARCHAR2,newsal NUMBER);
	  FUNCTION annual_income(name VARCHAR2) RETURN NUMBER;
	END;
	/
	CREATE PACKAGE BODY emp_pkg IS
	  PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)
	  IS
	  BEGIN
	    UPDATE emp SET sal=newsal
	    WHERE lower(ename)=lower(name);
	  END;
	  FUNCTION annual_income(name VARCHAR2) RETURN NUMBER
	  IS
	    annual_salary NUMBER(7,2);
	  BEGIN
	    SELECT sal*12+nvl(comm,0) INTO annual_salary
	    FROM emp WHERE lower(ename)=lower(name);
	    RETURN annual_salary;
	  END;
	END;
	/
	exec emp_pkg.update_sal('scott',1500)
	SELECT emp_pkg.annual_income('scott')  FROM dual;
11-9:
	SELECT ename FROM emp WHERE deptno=10;
	CREATE TRIGGER update_cascade
	AFTER UPDATE OF deptno ON dept
	FOR EACH ROW
	BEGIN
	  UPDATE emp SET deptno=:new.deptno
	  WHERE deptno=:old.deptno;
	END;
	/
11-10:
	DECLARE
	  v_ename VARCHAR2(5);
	  v_sal   NUMBER(6,2);
	  c_tax_rate CONSTANT NUMBER(3,2):=0.03;
	  v_tax_sal NUMBER(6,2);
	BEGIN
	  SELECT ename,sal INTO v_ename,v_sal
	  FROM emp WHERE empno=&eno;
	  v_tax_sal:=v_sal*c_tax_rate;
	  dbms_output.put_line('Ա:'||v_ename);
	  dbms_output.put_line('Ա:'||v_sal);
	  dbms_output.put_line('˰:'||v_tax_sal);
	END;
	/
11-11:
	DECLARE
	  v_ename emp.ename%TYPE;
	  v_sal  emp.sal%TYPE;
	  c_tax_rate CONSTANT NUMBER(3,2):=0.03;
	  v_tax_sal v_sal%TYPE;
	BEGIN
	  SELECT ename,sal INTO v_ename,v_sal
	  FROM emp WHERE empno=&eno;
	  v_tax_sal:=v_sal*c_tax_rate;
	  dbms_output.put_line('Ա:'||v_ename);
	  dbms_output.put_line('Ա:'||v_sal);
	  dbms_output.put_line('˰:'||v_tax_sal);
	END;
	/
11-12:
	DECLARE
	  TYPE emp_record_type IS RECORD (
	    name   emp.ename%TYPE,
	    salary emp.sal%TYPE,
	    title  emp.job%TYPE);
	  emp_record emp_record_type;
	BEGIN
	  SELECT ename,sal,job INTO emp_record
	  FROM emp WHERE empno=&eno;
	  dbms_output.put_line(':'||emp_record.name);
	  dbms_output.put_line(':'||emp_record.salary);
	  dbms_output.put_line('λ:'||emp_record.title);
	END;
	/
11-13:
	DECLARE
	  TYPE ename_table_type IS TABLE OF emp.ename%TYPE
	    INDEX BY BINARY_INTEGER;
	  ename_table ename_table_type;
	BEGIN
	  SELECT ename INTO ename_table(-1) FROM emp
	  WHERE empno=&eno;
	  dbms_output.put_line('Ա:'||ename_table(-1));
	END;
	/
11-14:
	CREATE OR REPLACE TYPE emp_type AS OBJECT(
	  name VARCHAR2(10),salary NUMBER(6,2),hiredate DATE);
	/
	 CREATE OR REPLACE TYPE emp_array IS TABLE OF emp_type;
	/
	CREATE TABLE department(
	  deptno NUMBER(2),dname VARCHAR2(10),employee emp_array
	) NESTED TABLE employee STORE AS employee;
11-15:
	CREATE TYPE article_type AS OBJECT (
	  title VARCHAR2(30),pubdate DATE);
	/
	CREATE TYPE article_array IS VARRAY(20) OF article_type;
	/
	CREATE TABLE author(
	  id NUMBER(6),name VARCHAR2(10),article article_array
	);
11-16:
	DECLARE
	  TYPE c1 IS REF CURSOR;
	  dyn_cursor c1;
	  col1 VARCHAR2(20);
	  col2 VARCHAR2(20);
	BEGIN
	  OPEN dyn_cursor FOR SELECT &col1,&col2 FROM &tab WHERE &con;
	  FETCH dyn_cursor INTO col1,col2;
	  dbms_output.put_line('col1:  '||col1);
	  dbms_output.put_line('col2:  '||col2);
	  CLOSE dyn_cursor;
	END;
	/
11-17:
	CREATE OR REPLACE TYPE house_type AS OBJECT(
	  street VARCHAR2(50),city VARCHAR2(20),
	  state VARCHAR2(20),zipcode VARCHAR2(6),
	  owner VARCHAR2(10)
	);
	/
	CREATE TABLE houses OF house_type;
	INSERT INTO houses VALUES('ױ·12','ͺ',
	  '','010010','');
	CREATE TABLE population (
	  id NUMBER(6) PRIMARY KEY,
	  name VARCHAR2(10),house_addr REF house_type
	);
	INSERT INTO population SELECT 1,'',ref(p)
	  FROM houses p WHERE p.owner='';
	INSERT INTO population SELECT 2,'',ref(p)
	  FROM houses p WHERE p.owner='';
	INSERT INTO population SELECT 3,'',ref(p)
	  FROM houses p WHERE p.owner='';
11-18:
	DECLARE
	  SUBTYPE my_type IS VARCHAR2(20);
	  v_name my_type(10);
	BEGIN
	  SELECT ename INTO v_name FROM emp
	  WHERE empno=&eno;
	  dbms_output.put_line(':'||v_name);
	END;
	/
11-19:
	var name varchar2(10)
	BEGIN
	  SELECT ename INTO :name FROM emp
	  WHERE empno=&eno;
	END;
	/
	PRINT name

11-20:
DECLARE
  v1 INT;
  v2 INT;
BEGIN
  v1:=empno_seq.currval;
  v2:=empno_seq.nextval;
  DBMS_OUTPUT.PUT_LINE('v1='||v1);
  DBMS_OUTPUT.PUT_LINE('v2='||v2);
END;
/

















