存储过程如下:
CREATE OR REPLACE FUNCTION WEBDB.FUNC_WRITE_USER (
P_OPER IN NUMBER, --操作 0 增加 1 修改2 删除
P_Account IN T_User_Info.I_Account%TYPE, --帐号
P_PWD IN T_User_Info.I_Pwd%TYPE, --用户密码
P_FLAG IN T_User_Info.I_Flag%TYPE, --权限 0:系统管理员 1:普通管理员
P_NAME IN T_User_Info.I_Name%TYPE --姓名
)
RETURN NUMBERAS
-- 变量申明
V_STRINS VARCHAR2 (2000):= ''; -- 追加数据表SQL文本
V_STRUPD VARCHAR2 (2000):= ''; -- 更新数据表SQL文本
V_STRDEL VARCHAR2 (2000):= ''; -- 删除数据表SQL文本
V_STRSEL VARCHAR2 (300) := ''; -- 检索数据表SQL文本
V_STRNO VARCHAR2 (100) := ''; -- 检索序列SQL文本
V_COUNT NUMBER (3); --记录数
V_FLAG NUMBER(1) := P_OPER; --操作 0 增加 1 修改2 删除BEGIN
-------------------------------------
-- 动态事件数据表追加SQL文本 --
-------------------------------------
V_STRINS := V_STRINS || 'INSERT INTO T_User_Info VALUES(';
V_STRINS := V_STRINS || ':P_Account ,'; --帐号
V_STRINS := V_STRINS || ':P_PWD ,'; --用户密码
V_STRINS := V_STRINS || ':P_FLAG ,'; --权限 0:系统管理员 1:普通管理员
V_STRINS := V_STRINS || ':P_NAME )'; --姓名
-------------------------------------
-- 动态事件数据表更新SQL文本 --
-------------------------------------
V_STRUPD := V_STRUPD || 'UPDATE T_User_Info SET ';
V_STRUPD := V_STRUPD || 'I_PWD = :P_PWD ,'; --用户密码
V_STRUPD := V_STRUPD || 'I_FLAG = :P_FLAG ,'; --权限 0:系统管理员 1:普通管理员
V_STRUPD := V_STRUPD || 'I_NAME = :P_NAME '; --姓名
V_STRUPD := V_STRUPD || ' WHERE I_Account = :P_Account ';
-------------------------------------
-- 动态事件数据表删除SQL文本 --
-------------------------------------
V_STRDEL := V_STRDEL || 'DELETE FROM T_User_Info ';
V_STRDEL := V_STRDEL || 'WHERE I_Account = :P_Account '; BEGIN
V_STRSEL := V_STRSEL || 'SELECT COUNT(*) FROM T_User_Info ';
V_STRSEL := V_STRSEL || 'WHERE I_Account = :P_Account ';
EXECUTE IMMEDIATE V_STRSEL INTO V_COUNT --符合条件的记录数
USING
P_Account ;
END;
IF V_COUNT = 0 AND V_FLAG = 0 THEN
-- 执行数据库追加SQL语句
EXECUTE IMMEDIATE V_STRINS
USING
P_Account, --帐号
P_PWD, --用户密码
P_FLAG, --权限 0:系统管理员 1:普通管理员
P_NAME; --姓名 ELSIF V_COUNT > 0 AND V_FLAG = 1 THEN
-- 执行数据库更新SQL语句
EXECUTE IMMEDIATE V_STRUPD
USING
P_Account, --帐号
P_PWD, --用户密码
P_FLAG, --权限 0:系统管理员 1:普通管理员
P_NAME; --姓名 ELSIF V_COUNT > 0 AND V_FLAG = 2 THEN
-- 执行数据库删除SQL语句
EXECUTE IMMEDIATE V_STRDEL
USING
P_Account;
ELSE
RETURN 0;
END IF; COMMIT; RETURN 1;-- 错误陷阱
EXCEPTION
WHEN OTHERS THEN
RETURN 0;END FUNC_WRITE_USER;
/
带进参数执行添加/删除都可以,执行更新时也执行正确,RETURN 1了,可就是不更新,为什么呢?
谢谢各位大侠!
有关表结构:
CREATE TABLE T_User_Info(
I_Account VARCHAR2(20) NOT NULL , --帐号 *
I_Pwd VARCHAR2(20) NOT NULL , --密码
I_Flag NUMBER(1,0) NOT NULL , --权限 0:系统管理员 1:普通管理员
I_Name VARCHAR2(20) NULL , --姓名 CONSTRAINT T_User_Info PRIMARY KEY(I_Account)
)
;
CREATE OR REPLACE FUNCTION WEBDB.FUNC_WRITE_USER (
P_OPER IN NUMBER, --操作 0 增加 1 修改2 删除
P_Account IN T_User_Info.I_Account%TYPE, --帐号
P_PWD IN T_User_Info.I_Pwd%TYPE, --用户密码
P_FLAG IN T_User_Info.I_Flag%TYPE, --权限 0:系统管理员 1:普通管理员
P_NAME IN T_User_Info.I_Name%TYPE --姓名
)
RETURN NUMBERAS
-- 变量申明
V_STRINS VARCHAR2 (2000):= ''; -- 追加数据表SQL文本
V_STRUPD VARCHAR2 (2000):= ''; -- 更新数据表SQL文本
V_STRDEL VARCHAR2 (2000):= ''; -- 删除数据表SQL文本
V_STRSEL VARCHAR2 (300) := ''; -- 检索数据表SQL文本
V_STRNO VARCHAR2 (100) := ''; -- 检索序列SQL文本
V_COUNT NUMBER (3); --记录数
V_FLAG NUMBER(1) := P_OPER; --操作 0 增加 1 修改2 删除BEGIN
-------------------------------------
-- 动态事件数据表追加SQL文本 --
-------------------------------------
V_STRINS := V_STRINS || 'INSERT INTO T_User_Info VALUES(';
V_STRINS := V_STRINS || ':P_Account ,'; --帐号
V_STRINS := V_STRINS || ':P_PWD ,'; --用户密码
V_STRINS := V_STRINS || ':P_FLAG ,'; --权限 0:系统管理员 1:普通管理员
V_STRINS := V_STRINS || ':P_NAME )'; --姓名
-------------------------------------
-- 动态事件数据表更新SQL文本 --
-------------------------------------
V_STRUPD := V_STRUPD || 'UPDATE T_User_Info SET ';
V_STRUPD := V_STRUPD || 'I_PWD = :P_PWD ,'; --用户密码
V_STRUPD := V_STRUPD || 'I_FLAG = :P_FLAG ,'; --权限 0:系统管理员 1:普通管理员
V_STRUPD := V_STRUPD || 'I_NAME = :P_NAME '; --姓名
V_STRUPD := V_STRUPD || ' WHERE I_Account = :P_Account ';
-------------------------------------
-- 动态事件数据表删除SQL文本 --
-------------------------------------
V_STRDEL := V_STRDEL || 'DELETE FROM T_User_Info ';
V_STRDEL := V_STRDEL || 'WHERE I_Account = :P_Account '; BEGIN
V_STRSEL := V_STRSEL || 'SELECT COUNT(*) FROM T_User_Info ';
V_STRSEL := V_STRSEL || 'WHERE I_Account = :P_Account ';
EXECUTE IMMEDIATE V_STRSEL INTO V_COUNT --符合条件的记录数
USING
P_Account ;
END;
IF V_COUNT = 0 AND V_FLAG = 0 THEN
-- 执行数据库追加SQL语句
EXECUTE IMMEDIATE V_STRINS
USING
P_Account, --帐号
P_PWD, --用户密码
P_FLAG, --权限 0:系统管理员 1:普通管理员
P_NAME; --姓名 ELSIF V_COUNT > 0 AND V_FLAG = 1 THEN
-- 执行数据库更新SQL语句
EXECUTE IMMEDIATE V_STRUPD
USING
P_Account, --帐号
P_PWD, --用户密码
P_FLAG, --权限 0:系统管理员 1:普通管理员
P_NAME; --姓名 ELSIF V_COUNT > 0 AND V_FLAG = 2 THEN
-- 执行数据库删除SQL语句
EXECUTE IMMEDIATE V_STRDEL
USING
P_Account;
ELSE
RETURN 0;
END IF; COMMIT; RETURN 1;-- 错误陷阱
EXCEPTION
WHEN OTHERS THEN
RETURN 0;END FUNC_WRITE_USER;
/
带进参数执行添加/删除都可以,执行更新时也执行正确,RETURN 1了,可就是不更新,为什么呢?
谢谢各位大侠!
有关表结构:
CREATE TABLE T_User_Info(
I_Account VARCHAR2(20) NOT NULL , --帐号 *
I_Pwd VARCHAR2(20) NOT NULL , --密码
I_Flag NUMBER(1,0) NOT NULL , --权限 0:系统管理员 1:普通管理员
I_Name VARCHAR2(20) NULL , --姓名 CONSTRAINT T_User_Info PRIMARY KEY(I_Account)
)
;
解决方案 »
- 0D换行符存到Oracle变为0D0A
- NetBeans怎么连接到oracle,不会写JDBC URL啊!求教
- 要死人了,谁了解oracle DEVELOPER给我讲讲,是怎么回事情
- *********************Oracle9i导入数据的问题!!!!!
- 是否超级用户名不能为带双引号的小写字符串?能否详细讲解双引号的作用?
- oracle9i只是在本机上安装了服务器端,可不可以象sql server那样,在本地建库和连接啊?
- 下面是一段自己修改的一个oracle存储过程,里面错误应该很多,大家找。按错误个数及难度给分.
- 问一个简单的关于表空间的问题,请不要见笑。
- 急!!一个简单的SQL语句问题,100分散分!!!
- 如何将表空间的管理由本地管理修改成字典管理(马上解决马上给分)
- 定义一个作业,在每月1号00:00:00时运行,怎样来定义时间?
- 如何解决ORA-01480: STR 赋值变量缺少空后缀错误?
将 USING
P_Account, --帐号
P_PWD, --用户密码
P_FLAG, --权限 0:系统管理员 1:普通管理员
P_NAME; --姓名
改为
using
P_PWD,--用户密码
P_FLAG,--权限 0:系统管理员 1:普通管理员
P_NAME,--姓名
P_Account --帐号