查询表的所有数据 函数调用
--查询表的所有数据
select * from wan;
--首先给表创建一个序列 每次增加1,从1开始
--给表新增一个列
alter table wan add(id number );
--创建序列
create sequence wan_id_se
start with 1
increment by 1
maxvalue 99999
nocache
nocycle;
--更新添加列的数据 让id每次增加1
update wan set id=wan_id_se.nextval ;
--过程控制语句
declare
a number :=1;
b wan.ename%type;
c number ;
begin
select count(*) into c from wan;
while a <=c
loop
select ename into b from wan where id=a;
dbms_output.put_line('姓名是'||b);
a:=a+1;
end loop;
end;
--输入内容 &
declare
sall emp.sal%type:=&sal;
begin
if sall<1500 then
dbms_output.put_line(sall||'df');
end if;
end;
declare
v_ename emp.ename%type :='&a';
v_sal emp.sal%type ;
begin
select sal into v_sal from emp where ename=v_ename;
if v_sal<1500 then
update emp set sal=sal+100 where ename=v_ename;
dbms_output.put_line('f '|| v_ename ||'dfg');
else
dbms_output.put_line('f '|| v_ename ||'++++++');
end if;
END;
--非预定义异常练习
declare
v_deptno dept.deptno%TYPE :=&deptno;
deptno_remaining EXCEPTION;
PRAGMA EXCEPTION_INIT(deptno_remaining, -2292);
/* -2292 是违反一致性约束的错误代码 */
begin
DELETE FROM dept WHERE deptno=v_deptno;
EXCEPTION
WHEN deptno_remaining THEN
DBMS_OUTPUT.PUT_LINE('违反数据完整性约束!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'---‘'||SQLERRM);
end;
-- 用户定义异常 使用关键字 raise
DECLARE
v_empno emp.empno%TYPE :=&empno;
no_result EXCEPTION; --声明异常
BEGIN
UPDATE emp SET sal=sal+100 WHERE empno=v_empno;
IF SQL%NOTFOUND THEN
RAISE no_result; --跳转到异常部分
END IF;
EXCEPTION
WHEN no_result THEN
DBMS_OUTPUT.PUT_LINE('你的数据更新语句失败了!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLCODE||'---'||SQLERRM);
END;
--创建函数
create or replace function get_salary(
dept_no number, emp_count out number)
return number
is
v_sum number;
begin
select sum(sal),count(*) into v_sum,emp_count from emp where deptno=dept_no;
return v_sum;
exception
when no_data_found then
dbms_output.put_line('你需要的数据不存在!');
when others then
dbms_output.put_line('-----');
end get_salary;
--调用函数
--方法一
DECLARE
V_num NUMBER;
V_sum NUMBER;
BEGIN
V_sum :=get_salary(20, V_num); --输入参数
DBMS_OUTPUT.PUT_LINE('30号部门工资总和:'||v_sum||',人数:'||V_num);
END;
--方法二
DECLARE
V_num NUMBER;
V_sum NUMBER;
BEGIN
V_sum :=get_salary( dept_no => 30,emp_count => v_num);
DBMS_OUTPUT.PUT_LINE('30号部门工资总和:'||v_sum||',人数:'||v_num);
END;
--方法三
DECLARE
Var VARCHAR2(32);
BEGIN
Var := demo_fun('user1', 30, sex => '男');
DBMS_OUTPUT.PUT_LINE(var);
Var := demo_fun('user2', age => 40, sex => '男');
DBMS_OUTPUT.PUT_LINE(var);
Var := demo_fun('user3', sex => '女', age => 20);
DBMS_OUTPUT.PUT_LINE(var);
END;
select Mod(50,20) from dual
Select to_date('2015126','yyyyMMdd') from dual;
select to_char(sysdate,'HH24:MI:SS ') from dual;