oracle 自定义函数, 新手错误 解决

写 oracle的 自定义函数的时候,老是 报错我也是醉了 不过也算找到原因了。、 首先 ,写好 自定义函数的 时候, 执行的时候 选择的 命令 是 执行SQL 声明, 而不是 SQL 脚本,、 否则报错。 在 执行成功后, 使用的时候, 如果 调用失败, 应该, 更新 一下 oracle 连接,否则有可能 oracle 没有 自动刷新。 如果 然后 就 到了 如果 声明变量的时候, 如果是varchar 必须 指定大小,否则报错。 注意: char , varchar , varchar2 是不一样的 当然 如果你们可以看懂 爆错问题, 算你超神

CREATE OR REPLACE 
		FUNCTION testFunc8 (num1 IN NUMBER, num2 IN NUMBER,num6 VARCHAR2)
		RETURN VARCHAR2
		AS
			num3 number;
			num4 number;
			num5 VARCHAR2(50); -- 参数,字符串,必须说明  大小 
		BEGIN
			num3 := num1 + num2;
			num4 := num1 * num2;
			num5 := 'ggg';
			RETURN num6;
		END;

SELECT testFunc8(1,2,'欧敏'),NAME_ FROM  CRM_OU_USER WHERE NAME_='欧敏'

如果是 赋值的话

CREATE OR REPLACE 
		FUNCTION testFuncTable (tname VARCHAR2)
		RETURN VARCHAR2
		AS
			
			tableName VARCHAR2(100); -- 参数,字符串,必须说明  大小 
		BEGIN
			tableName := tname; -- 赋值 字符串
			--DELETE FROM tableName; 不可以 删除 
			RETURN '删除成功';
		END;

对数据库有写操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函数,是无法简单的用SQL来调用的. 可以使用 存储过程其他,触发器 使用"自主事物",可以解决这个问题.

其实"自主事物"的功能,主要是解决回滚时,标记了PRAGMA AUTONOMOUS_TRANSACTION;的代码块不受外面调用的事物作用.

在解决触发器更新不成功时,如果按默认,记录日志的也将回滚,用该方法强制记录日志,效果较好.

参考 地址: https://my.oschina.net/elim1/blog/811339

转载于:https://my.oschina.net/ouminzy/blog/870681

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值