使用ORACLE建立一个函数,但是无法调用。提示:程序包或函数处于无效状态

yoyodoxing 2011-05-04 10:44:57
create or replace FUNCTION org_order (org_id in number(8)) return varchar2 is
Results varchar2(6);
begin
Results := null;

begin
if org_id = 10007909 then
Results:='01临平';
elsif org_id = 10235382 then
Results:='02乔司';
elsif org_id = 10007910 then
Results:='03瓶窑';
elsif org_id = 10235383 then
Results:='04良渚';
elsif org_id = 10007911 then
Results:='05余杭';
elsif org_id = 10007912 then
Results:='06塘栖';
end if;
end;

return(Results);
end org_order;

运行没有提示错误,
使用:select org_order(ua.org_id) from sys_org ua 调用,函数,提示:程序包或函数处于无效状态

在左边+FUNCTION点开来,看到org_order有个X标记
...全文
5422 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangdh12 2011-05-04
  • 打赏
  • 举报
回复
为什么两个begin 和end? 函数就是写错了, 当然就编译不通过,处于无效的状态了。
select * from user_objects t where t.status<>'VALID' 看看是否包含你这个对象。
hanks_gao 2011-05-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 yejihui9527 的回复:]

编译没有错,是因为你新增的,所以没有提示。
貌似要关闭了以后,重新edit再编译,它就有提示出错了。
[/Quote]

是的,如果你用PL/SQL Developer的话,右键函数名称,然后选择View或Edit就可以看到错误提示了。
ssqtjffcu 2011-05-04
  • 打赏
  • 举报
回复

create or replace FUNCTION org_order(org_id in number) return varchar2 is --去掉number(8),只需要定义类型,不需要定义大小
Results varchar2(6);
begin
Results := null;

begin
if org_id = 10007909 then
Results := '01临平';
elsif org_id = 10235382 then
Results := '02乔司';
elsif org_id = 10007910 then
Results := '03瓶窑';
elsif org_id = 10235383 then
Results := '04良渚';
elsif org_id = 10007911 then
Results := '05余杭';
elsif org_id = 10007912 then
Results := '06塘栖';
end if;
end;

return(Results);
end org_order;
xumeng929 2011-05-04
  • 打赏
  • 举报
回复
没有编译通过吧
yejihui9527 2011-05-04
  • 打赏
  • 举报
回复
编译没有错,是因为你新增的,所以没有提示。
貌似要关闭了以后,重新edit再编译,它就有提示出错了。
304的的哥 2011-05-04
  • 打赏
  • 举报
回复

--楼上else语句写错了
create or replace FUNCTION org_order (org_id in number)
return varchar2 is
Results varchar2(10);
begin
if org_id = 10007909 then
Results:='01临平';
elsif org_id = 10235382 then
Results:='02乔司';
elsif org_id = 10007910 then
Results:='03瓶窑';
elsif org_id = 10235383 then
Results:='04良渚';
elsif org_id = 10007911 then
Results:='05余杭';
elsif org_id = 10007912 then
Results:='06塘栖';
else Results:=null;--oracle中if elsif一定要有else语句,这样才不会出错
end if;
return(Results);
end org_order;
304的的哥 2011-05-04
  • 打赏
  • 举报
回复

create or replace FUNCTION org_order (org_id in number)
return varchar2 is
Results varchar2(10);
begin
if org_id = 10007909 then
Results:='01临平';
elsif org_id = 10235382 then
Results:='02乔司';
elsif org_id = 10007910 then
Results:='03瓶窑';
elsif org_id = 10235383 then
Results:='04良渚';
elsif org_id = 10007911 then
Results:='05余杭';
elsif org_id = 10007912 then
Results:='06塘栖';
else org_id=null; --oracle中if elsif一定要有else语句,这样才不会出错
end if;
return(Results);
end org_order;
--这个语句不用嵌套块也行.
kingtiy 2011-05-04
  • 打赏
  • 举报
回复
org_id in number(8)
把这个8去了.oracle的参数是不需要指定大小的
第一篇 Oracle管理配置 第1章 Oracle安装配置(教学视频:10分钟) 23 1.1 Oracle简介 23 1.1.1 数据库术语 23 1.1.2 主流数据库简介 24 1.1.3 Oracle数据库的特点 24 1.2 安装Oracle数据库 25 1.2.1 Oracle数据库的版本变迁及安装环境 25 1.2.2 安装过程 26 1.2.3 安装中需要注意的问题 27 1.3 本章小结 28 1.4 习题 28 第2章 Oracle常用工具(教学视频:7分钟) 29 2.1 Net Configuration Assistant(网络配置助手) 29 2.1.1 监听程序配置 29 2.1.2 命名方法配置 31 2.1.3 本地Net服务名配置 32 2.2 Net Manager(网络管理员) 34 2.3 本章实例 36 2.4 本章小结 38 2.5 习题 38 第3章 SQL Plus和PL/SQL(教学视频:11分钟) 39 3.1 SQL Plus与PL/SQL简介 39 3.2 使用SQL Plus 40 3.2.1 登录SQL Plus 40 3.2.2 SQL Plus输出结果的格式化 41 3.2.3 SQL Plus小结 46 3.3 PL/SQL 46 3.3.1 PL/SQL常用开发工具 46 3.3.2 开发一个简单的PL/SQL程序 48 3.4 本章实例 49 3.5 本章小结 50 3.6 习题 50 第二篇 Oracle数据库对象 第4章 Oralce数据库(教学视频:15分钟) 51 4.1 创建Oracle数据库 51 4.2 Oracle数据库的相关术语 52 4.2.1 数据库 53 4.2.2 数据库实例和SID 53 4.2.3 ORACLE_SID 54 4.3 Oracle数据库的备份与恢复 55 4.3.1 逻辑备份/恢复(导出/导入) 55 4.3.2 物理备份/恢复 56 4.3.3 利用PL/SQL Developer备份数据库 60 4.4 本章实例 61 4.5 本章小结 61 4.6 习题 62 第5章 Oracle数据表对象(教学视频:42分钟) 63 5.1 Oracle表空间 63 5.1.1 Oracle表空间简介 63 5.1.2 创建Oracle表空间 64 5.1.3 查看表空间 66 5.1.4 修改数据库默认表空间 67 5.1.5 修改表空间名称 68 5.1.6 删除表空间 69 5.2 创建Oracle数据表 70 5.2.1 利用工具创建数据表 70 5.2.2 利用工具查看数据表 71 5.2.3 利用命令创建数据表 72 5.2.4 利用命令查看表结构 72 5.3 修改Oracle数据表结构 73 5.3.1 利用工具修改数据表结构 73 5.3.2 利用命令修改数据表结构 74 5.4 删除数据表 75 5.4.1 利用工具删除数据表 76 5.4.2 利用SQL语句删除数据表 76 5.5 备份/恢复数据表 76 5.5.1 利用工具备份/恢复数据表 77 5.5.2 利用命令备份/恢复数据表 82 5.6 临时表 83 5.6.1 临时表简介 83 5.6.2 会话级临时表 84 5.6.3 事务级临时表 85 5.6.4 查看临时表在数据库中的信息 86 5.6.5 临时表的应用场景 86 5.7 特殊的表dual 87 5.7.1 分析dual表 87 5.7.2 dual表的应用场景 87 5.7.3 修改dual表对查询结果的影响 88 5.8 本章实例 89 5.9 本章小结 90 5.10 习题 90 第6章 约束(教学视频:43分钟) 91 6.1 主键约束 91 6.1.1 主键简介 91 6.1.2 创建主键约束 92 6.1.3 修改表的主键约束 94 6.1.4 主键应用场景 96 6.2 外键约束 97 6.2.1 外键简介 97 6.2.2 创建外键约束 97 6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 6.4 检查约束 108 6.4.1 检查约束简介 108 6.4.2 创建检查约束 108 6.4.3 修改检查约束 110 6.4.4 检查约束的使用 111 6.5 默认值约束 111 6.5.1 默认值约束简介 112 6.5.2 创建默认值约束 112 6.5.3 修改默认值约束 113 6.6 本章实例 115 6.7 本章小结 116 6.8 习题 116 第7章 视图(教学视频:50分钟) 117 7.1 关系视图 117 7.1.1 建立关系视图 117 7.1.2 修改/删除视图 118 7.1.3 联接视图 120 7.1.4 编译视图 122 7.1.5 使用force选项强制创建视图 124 7.1.6 利用视图更新数据表 125 7.1.7 with check option选项 126 7.1.8 关系视图小结 128 7.2 内嵌视图 128 7.2.1 内嵌视图简介 128 7.2.2 内嵌视图的使用 128 7.2.3 内嵌视图小结 130 7.3 对象视图 131 7.3.1 对象视图简介 131 7.3.2 对象视图简介 131 7.4 物化视图 133 7.4.1 物化视图简介 133 7.4.2 物化视图的使用 133 7.4.3 物化视图的数据加载 135 7.4.4 物化视图的数据更新 135 7.4.5 查询重写 136 7.5 本章小结 136 7.6 本章实例 137 7.7 习题 137 第8章 函数与存储过程(教学视频:48分钟) 138 8.1 函数 138 8.1.1 函数简介 138 8.1.2 创建函数 139 8.1.3 函数中的括号 140 8.1.4 函数的参数 141 8.1.5 函数的确定性 142 8.1.6 典型函数举例 143 8.2 存储过程 144 8.2.1 存储过程简介 144 8.2.2 创建存储过程 144 8.2.3 存储过程的参数——IN参数 146 8.2.4 存储过程的参数——OUT参数 147 8.2.5 存储过程的参数——IN OUT参数 149 8.2.6 存储过程的参数——参数顺序 149 8.2.7 存储过程的参数——参数的默认值 152 8.2.8 存储过程的参数——参数顺序总结 153 8.3 程序包 153 8.3.1 规范 153 8.3.2 主体 155 8.3.3 调用程序包中的函数/存储过程 157 8.3.4 程序包中的变量 158 8.4 本章实例 159 8.5 本章小结 161 8.6 习题 161 …… 第9章 游标(教学视频:36分钟) 162 第10章 触发器(教学视频:58分钟) 178 第11章 序列(教学视频:28分钟) 206 第12章 用户角色与权限控制(教学视频:45分钟) 215 第三篇 Oracle中的SQL 第13章 Oracle数据类型(教学视频:21分钟) 231 第14章 Oracle中的函数与表达式(教学视频:111分钟) 240 第15章 Oracle中的控制语句(教学视频:16分钟) 282 第16章 SQL查询(教学视频:55分钟) 290 第17章 SQL更新数据(教学视频:34分钟) 319 第四篇 Oracle编程高级应用 第18章 数据库速度优化与数据完整性(教学视频:32分钟) 332 第19章 数据一致性与事务管理(教学视频:46分钟) 341 第20章 并发控制(教学视频:35分钟) 356 第21章 Oracle中的正则表达式(教学视频:29分钟) 369 第五篇 Oracle与编程语言综合使用实例 第22章 Oracle在Java开发中的应用(教学视频:38分钟) 376 第23章 Oracle在C#开发中的应用(教学视频:12分钟) 391
第一章 集合 1.1 索引表 1.1.1 定义索引表 1.1.2 将条目插入到索引表中 1.1.3 对索引表中进行操作 1.1.4 索引表中的函数 1.2 嵌套表 1.2.1 初始化嵌套表 1.2.2 扩展嵌套表 1.2.3 删除嵌套表中的条目 1.3 变长数组 1.3.1 定义变长数组 1.3.2 扩展变长数组 1.4 批绑定 1.5 集合的异常处理 第二章 触发器 2.1 触发器的创建 2.2 触发器的管理 2.3 触发器的新功能 2.4 替代触发器 2.5 触发器的局限性 第三章 对象 3.1 对象的定义 3.2 对象的存贮和检索 第四章 调试 4.1 编写 DEBUG 程序包(例程) 4.2 调用函数 第五章 大对象类型 5.1 大对象数据类型 5.2 在Oracle8i 数据库中使用外部文件: 5.3 DBMS_LOB 包 5.3.1 函数说明 5.3.2 应用举例 5.3.3 内部 LOB 的函数和过程5.3.4 内部 LOB 的函数和过程的应用举例 5.3.5 临时 LOB 第六章 管理事务和锁定 6.1 事务 6.2 锁定 第七章 动态 SQL 7.1 DBMS_SQL 程序包 7.2 本机动态SQL 7.2.1 执行 DDL 语句 7.2.2 使用绑定变量 7.2.3 执行 PL/SQL 块 第八章 显示数据 8.1 DBMS_OUTPUT 程序包 8.1.1 开启屏幕显示 8.1.2 关闭屏幕显示 8.1.3 其他函数 8.1.4 引发的异常 8.2 UTL_FILE 程序包 8.2.1 概述 8.2.2 函数描述 8.2.3 例程 8.3 TEXT_IO 程序包 第九章 管理数据作业 9.1 DBMS_JOB 包 9.2 使用后台进程 9.3 执行作业 9.3.1 使用SUBMIT 将作业提交给作业队列 9.3.2 使用RUN 立即执行作业 9.3.3 作业环境 9.4 查看作业 9.4.1 DBA_JOBS 视图的结构 9.4.2 DBA_JOBS_RUNNING 视图的结构 9.5 管理作业 9.5.1 删除作业 9.5.2 修改作业 9.5.3 导入和导出作业 9.5.4 处理损坏的作业 9.5.5 例程 第十章 过程通信 10.1 报警(DBMS_ALERT 程序包) 10.1.1 建立报警的次序 10.1.2 函数应用和说明 10.1.3 应用举例 10.2 DBMS_PIPE 程序包 10.2.1 公有管道和私有管道 10.2.2 使用管道 10.2.3 DBMS_PIPE 包的函数 10.2.4 例程 10.3 DBMS_ALERT 与 DBMS_PIPE 的比较 第十一章 PL/SQL 和 JAVA 11.1 Oracle JAVA 11.2 装载、应用、删除JAVA

17,089

社区成员

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

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