请教一个最最简单的存储过程问题

demo001 2004-08-11 06:22:29
刚到新公司第三天

组长叫我练习一下Oracle数据库的存储过程

最最简单的

可惜我不会,以前没有接触过Oracle,数据库方面的东西接触的比较少

想请教一下各位

这样一个简单的存储过程:

在一个现成的表中 插入两条记录,再删除第一条,最后更新最后一条

实现之后

再考虑使用动态SQL语句实现

请问什么是动态SQL语句?
...全文
140 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dinya2003 2004-08-12
  • 打赏
  • 举报
回复
先看书.
beckhambobo 2004-08-11
  • 打赏
  • 举报
回复
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPE myrctype IS REF CURSOR;

PROCEDURE get (p_id NUMBER, p_rc OUT myrctype);
END pkg_test;
/

CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get (p_id NUMBER, p_rc OUT myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
SELECT ID, NAME, sex, address, postcode, birthday
FROM student;
ELSE
sqlstr :=
'select id,name,sex,address,postcode,birthday
from student where id=:w_id';
OPEN p_rc FOR sqlstr USING p_id;
END IF;
END get;
END pkg_test;
/
liuyi8903 2004-08-11
  • 打赏
  • 举报
回复
create or replace procedure p_test(v_count out integer)is

begin
select count(1)
into v_count
from tablename;
end p_test;
wylwyl1130 2004-08-11
  • 打赏
  • 举报
回复
本地动态sql例子
DECLARE
sql_stmt VARCHAR2(200);
plsql_block VARCHAR2(500);
emp_id NUMBER(4) := 7566;
salary NUMBER(7,2);
dept_id NUMBER(2) := 50;
dept_name VARCHAR2(14) := ’PERSONNEL’;
location VARCHAR2(13) := ’DALLAS’;
emp_rec emp%ROWTYPE;

BEGIN
EXECUTE IMMEDIATE ’CREATE TABLE bonus (id NUMBER, amt NUMBER)’;
sql_stmt := ’INSERT INTO dept VALUES (:1, :2, :3)’;

EXECUTE IMMEDIATE sql_stmt USING dept_id, dept_name, location;
sql_stmt := ’SELECT * FROM emp WHERE empno = :id’;

EXECUTE IMMEDIATE sql_stmt INTO emp_rec USING emp_id;
plsql_block := ’BEGIN emp_pkg.raise_salary(:id, :amt); END;’;

EXECUTE IMMEDIATE plsql_block USING 7788, 500;
sql_stmt := ’UPDATE emp SET sal = 2000 WHERE empno = :1
RETURNING sal INTO :2’;

EXECUTE IMMEDIATE sql_stmt USING emp_id RETURNING INTO salary;
EXECUTE IMMEDIATE ’DELETE FROM dept WHERE deptno = :num’
USING dept_id;

EXECUTE IMMEDIATE ’ALTER SESSION SET SQL_TRACE TRUE’;
END;

jxc 2004-08-11
  • 打赏
  • 举报
回复
动态sql语句和静态sql相对应的.
静态sql语句就是常用的sql,如:
select * from tab;

如果sql语句的某部分需要动态变化,则静态sql语句就不太方便了,这时把sql语句写到字符串变量里,再执行字符串里的sql语句,如:
ls_sql := 'select ' || ls_col || ' from ' || ls_tname;
execute immediate ls_sql;
wylwyl1130 2004-08-11
  • 打赏
  • 举报
回复
create or replace procedure pro_1(..)
as
..
..
begin
insert into tbname values(....);
drop from tbname where .......;
update tbname set .......;
end;
baojianjun 2004-08-11
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/3242/3242763.xml?temp=.8972437

http://community.csdn.net/Expert/topic/2773/2773856.xml?temp=.9832117
demo001 2004-08-11
  • 打赏
  • 举报
回复
谢谢

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧