SQL> create or replace
2 PROCEDURE get_teacherInfo (p_deptID IN t_teacher.deptID%TYPE DEFAULT null)
3 AS
4 v_cursorID INTEGER; -- 游标ID
5 v_select varchar2(200); -- 查询SQL语句
6 v_teaID VARCHAR2(15); -- 教师编号
7 v_teaName VARCHAR2(10); -- 教师姓名
8 v_dept VARCHAR2(20); -- 教师所在院系
9 v_selectResult INTEGER; -- 游标执行语句返回结果
10 BEGIN
11 v_cursorID:= DBMS_SQL.OPEN_CURSOR; -- 打开游标
12 v_select:='SELECT teaID,teaName,dept FROM t_teacher WHERE deptID=:deptID';
13 DBMS_SQL. PARSE (v_cursorID, v_select, DBMS_SQL.NATIVE); -- 解析SQL
14 DBMS_SQL. BIND_VARIABLE_CHAR (v_cursorID,:deptID, p_deptid); -- 绑定变量
15 DBMS_SQL. DEFINE_CLUMN (v_cursorId,1,v_teaID,15); -- 获取的被选择列的对应值
16 DBMS_SQL. DEFINE_CLUMN (v_cursorId,2,v_teaName,10);
17 DBMS_SQL. DEFINE_CLUMN (v_cursorId,3,v_dept,20);
18 v_selectResult:= DBMS_SQL.EXECUTE(v_cursorID); -- 执行SQL
19 LOOP
20 IF DBMS_SQL.FETCH_ROWS(v_cursorID)=0 THEN
21 EXIT;
22 END IF;
23 DBMS_SQL.COLUMN_VALUE(v_cursorID,1,v_teaID); -- 取得指定位置对应的值
24 DBMS_SQL.COLUMN_VALUE(v_cursorID,2,v_teaName);
25 DBMS_SQL.COLUMN_VALUE(v_cursorID,3,v_dept);
26 END LOOP;
27 DBMS_SQL.CLOSE_CURSOR(v_cursorID); -- 关闭游标
28 COMMIT; --提交事务
29 EXCEPTION
30 WHEN OTHERS THEN
31 DBMS_SQL.CLOSE_CURSOR(v_cursorID); -- 关闭游标
32 RAISE;
33 END;
34 /警告: 创建的过程带有编译错误。
错误(14,43): PLS-00049: 错误的赋值变量 'DEPTID'SQL> desc t_teacher;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TEAID NOT NULL VARCHAR2(15)
TEANAME NOT NULL VARCHAR2(10)
AGE NOT NULL NUMBER(2)
SEX NOT NULL CHAR(2)
DEPTID NOT NULL VARCHAR2(15)
DEPT NOT NULL VARCHAR2(20)
PROFESSION VARCHAR2(10)
SALARY NOT NULL NUMBER(5)
PENSION NUMBER(5,2)SQL> spool off
2 PROCEDURE get_teacherInfo (p_deptID IN t_teacher.deptID%TYPE DEFAULT null)
3 AS
4 v_cursorID INTEGER; -- 游标ID
5 v_select varchar2(200); -- 查询SQL语句
6 v_teaID VARCHAR2(15); -- 教师编号
7 v_teaName VARCHAR2(10); -- 教师姓名
8 v_dept VARCHAR2(20); -- 教师所在院系
9 v_selectResult INTEGER; -- 游标执行语句返回结果
10 BEGIN
11 v_cursorID:= DBMS_SQL.OPEN_CURSOR; -- 打开游标
12 v_select:='SELECT teaID,teaName,dept FROM t_teacher WHERE deptID=:deptID';
13 DBMS_SQL. PARSE (v_cursorID, v_select, DBMS_SQL.NATIVE); -- 解析SQL
14 DBMS_SQL. BIND_VARIABLE_CHAR (v_cursorID,:deptID, p_deptid); -- 绑定变量
15 DBMS_SQL. DEFINE_CLUMN (v_cursorId,1,v_teaID,15); -- 获取的被选择列的对应值
16 DBMS_SQL. DEFINE_CLUMN (v_cursorId,2,v_teaName,10);
17 DBMS_SQL. DEFINE_CLUMN (v_cursorId,3,v_dept,20);
18 v_selectResult:= DBMS_SQL.EXECUTE(v_cursorID); -- 执行SQL
19 LOOP
20 IF DBMS_SQL.FETCH_ROWS(v_cursorID)=0 THEN
21 EXIT;
22 END IF;
23 DBMS_SQL.COLUMN_VALUE(v_cursorID,1,v_teaID); -- 取得指定位置对应的值
24 DBMS_SQL.COLUMN_VALUE(v_cursorID,2,v_teaName);
25 DBMS_SQL.COLUMN_VALUE(v_cursorID,3,v_dept);
26 END LOOP;
27 DBMS_SQL.CLOSE_CURSOR(v_cursorID); -- 关闭游标
28 COMMIT; --提交事务
29 EXCEPTION
30 WHEN OTHERS THEN
31 DBMS_SQL.CLOSE_CURSOR(v_cursorID); -- 关闭游标
32 RAISE;
33 END;
34 /警告: 创建的过程带有编译错误。
错误(14,43): PLS-00049: 错误的赋值变量 'DEPTID'SQL> desc t_teacher;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
TEAID NOT NULL VARCHAR2(15)
TEANAME NOT NULL VARCHAR2(10)
AGE NOT NULL NUMBER(2)
SEX NOT NULL CHAR(2)
DEPTID NOT NULL VARCHAR2(15)
DEPT NOT NULL VARCHAR2(20)
PROFESSION VARCHAR2(10)
SALARY NOT NULL NUMBER(5)
PENSION NUMBER(5,2)SQL> spool off
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货