写 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;的代码块不受外面调用的事物作用.