触发器中调用存储过程,储存过程存在DLL语句

maomaoxiaobu 2016-06-21 11:41:37
重写发下,刚才可能没描述清楚。另外这次在触发器中加入了自治事务声明,但是还是报错,实在找不到原因,希望大神帮忙
首先贴出触发器代码;
create or replace trigger GET_ORD_ID --触发器,插入数据时候生产订单号,订单号由系统时间+自动增长列组成
before insert on POINFO
declare
PRAGMA AUTONOMOUS_TRANSACTION;--声明触发器为自治事务
for each row
begin
UserSUPP_ORDID();--调用存储过程
:new.order_id:=to_char(sysdate,'yyyymmdd')||'&'||SUPP_ORDID.nextval;--给ord_id赋值
commit;--提交事务
end;
下面是存储过程的代码

create or replace procedure UserSUPP_ORDID--根据日期来决定是否更新自动增长序列,假如日期更新,重写建立自动增长列
Authid Current_User--授予权限,不加这句会提示权限不足
is
num number;
begin
select count(*) into num FROM poinfo where to_char(sysdate,'yyyymmdd')=to_char(order_date,'yyyymmdd');--查询系统中是否有这个日期
if(num=0) then--假如没有这个日期
EXECUTE IMMEDIATE 'drop sequence SUPP_ORDID' ;--删除原有自动增长列,--创建新自动增长列
EXECUTE IMMEDIATE 'create sequence SUPP_ORDID
start with 1
increment by 1
maxvalue 100000
nocycle
nocache';
end if;
end;

测试语句
insert into poinfo (SUP_COMID,ORDER_DATE,LINKNAME,TEL) values(1,sysdate,'小二','13512345689');

大家也可以看图;


...全文
569 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
嶶風 2016-06-22
  • 打赏
  • 举报
回复
还有最后一个截图的错误,把for each row 位置放到declare 上面试试
嶶風 2016-06-22
  • 打赏
  • 举报
回复
在触发器中可以执行ddl语句的。创建序列完全可以。 把你的下列代码: EXECUTE IMMEDIATE 'drop sequence SUPP_ORDID' ;--删除原有自动增长列,--创建新自动增长列 EXECUTE IMMEDIATE 'create sequence SUPP_ORDID start with 1 increment by 1 maxvalue 100000 nocycle nocache'; 修改为: DBMS_UTILITY.EXEC_DDL_STATEMENT('drop sequence SUPP_ORDID '); DBMS_UTILITY.EXEC_DDL_STATEMENT('create sequence SUPP_ORDID start with 1 increment by 1 maxvalue 100000 nocycle nocache'); 查看一下用户有没有只用DBMS_UTILITY包的权限 和创建队列的权限。
maomaoxiaobu 2016-06-22
  • 打赏
  • 举报
回复

按照你说的我改了存储过程,另外在触发器里面把 for each row放到了declare上面,但是编译器还是报错
maomaoxiaobu 2016-06-21
  • 打赏
  • 举报
回复
实在不行我也只能换思路了,哎
卖水果的net 2016-06-21
  • 打赏
  • 举报
回复
触发器中,不能使用 DDL 语句; 你换一种思路吧,比如,在你插入这条记录前,手工调用一下这个 存储过程 ;
第18章 程序应用控制 483 18.1 提取信息 484 0795 判断驱动器类型并获取其属性 484 0796 如何得到本地机器的IP 484 0797 如何得到本地运行的EXE的路径 485 0798 得到计算机所有正在运行的进程 485 0799 获得Windows的启动模式 485 0800 获取鼠标的按钮个数及鼠标安装状态 485 0801 检测计算机是否存在网络连接 486 0802 如何判断计算机的联机状态 486 0803 获取计算机屏幕分辨率 486 0804 获取计算机当前登录的用户名称 486 18.2 系统控制 486 0805 远程关闭或重新启动计算机 486 0806 创建应用程序快捷方式 487 0807 启动Windows系统服务 488 0808 在C#应用程序控制输入法 488 0809 打开“区域和语言选项”对话框并指定选项卡 489 0810 如何执行命令行命令? 489 0811 如何修改计算机的默认打印机 490 0812 如何实现行业软件系统注销功能 490 0813 如何将计算机设置为休眠状态 490 0814 在Windows系统建立事件日志 491 0815 如何使PC喇叭发音 491 18.3 程序控制 491 0816 使用回车键控制鼠标焦点 491 0817 如何调用可执行应用程序 492 0818 TextBox上禁用鼠标右鍵 492 0819 如何实现屏幕截图 492 0820 如何将截取的图片保存为指定图片格式 493 0821 如何复制程序本身 493 0822 分段显示电话号码颜色 493 0823 软件版本号是如何组成的 493 0824 单击“关闭”按钮或按 Alt + F4 键时最小化窗口 494 0825 屏蔽RichTextBox控件 Ctrl + V 快捷键 495 18.4 其他 495 0826 将DataGridView控件的数据导入Excel 495 0827 无法获取自定义环境变量的值 496 0828 将组件放到COM+服务器上去 496 0829 调用非托管的DLL文件 497 0830 如何将GridView控件数据导入Word 497 0831 如何将GridView控件数据导入Excel 497 0832 单片机如何实现在线调试 498 0833 单片机如何实现内存优化管理 498 0834 单片机实现文件系统管理 498 0835 杀死进程 498 0836 如何下载某网站上的图片资源 498 第19章 SQL查询相关技术 501 19.1 常用SQL查询技术 502 0837 如何在查询正确使用单引号“’” 502 0838 SQLSELECT语句的执行顺序 502 0839 在查询时查询数据为指定长度的数据 502 0840 如何利用WHERE参数过滤数据 503 0841 如何正确地理解和运用SQL的判式 503 0842 如何正确地理解和使用SQL的关键字 503 19.2 比较、逻辑运算符查询 504 0843 如何使用算术运算符号进行比较查询 504 0844 如何使用比较运算符号进行比较查询 504 0845 如何使用AND逻辑运算符查询 505 0846 如何使用OR逻辑运算符查询 506 0847 如何联合使用AND和OR运算符查询 506 0848 如何在查询正确使用逻辑操作符 507 0849 利用通配符进行查询 507 19.3 SQL关键字查询 508 0850 如何使用ESCAPE关键字规定转义字符 508 0851 如何使用BETWEEN进行范围查询 508 0852 如何使用NOT BETWEEN进行范围查询 509 0853 如何使用GROUP BY子句查询 509 0854 如何使用HAVING语句过滤分组数据 510 0855 如何使用ALL关键字查询 510 0856 如何使用CUBE关键字查询 511 19.4 表结构与性能 511 0857 检测信息是否存在 511 0858 @@CPU_BUSY获取CPU的工作时间 511 0859 如何获取磁盘读写次数 512 0860 获取SQL Server服务器名 512 0861 获取数据库标识号 512 0862 判断用户是否访问数据的权限 512 0863 显示表列信息 512 0864 显示表任意列名称 513 0865 提高SQL性能加快执行速度 513 0866 控制批处理内语句的执行 513 0867 执行查询但是显示列信息 514 0868 获取连接或试图连接的次数 514 0869 获取当前数据库的语言名 514 19.5 时间与谓词 514 0870 时间函数的使用 514 0871 设置数据库时间表显形式 515 0872 格式化日期显示格式 515 0873 如何正确理解SQL的NULL值 516 0874 如何使用IsNull()函数来处理空值 516 0875 如何使用Nullif()函数来处理空值 516 0876 查询空值(NULL)的技巧 517 0877 利用关键字DISTINCT去除重复记录 517 0878 巧用TOP子句获取信息 518 0879 巧用CONTAINS谓词检索信息 518 0880 通过ISNULL替换信息 519 0881 比较COMPUTE和GROUP BY 519 0882 如何对指定时间段进行查询 519 0883 对某期间的数据进行查询的几种方法 519 0884 NOT与谓词进行组合条件的查询 520 19.6 聚合函数 520 0885 聚合函数SUM的使用 520 0886 聚合函数AVG的使用 521 0887 如何使用聚合函数MAX 521 0888 如何使用聚合函数MIN 522 0889 如何使用聚合函数COUNT 522 0890 如何使用聚合函数First或Last 523 19.7 子查询与连接查询 523 0891 union与连接之间的区别 523 0892 如何应用IN查询表的记录信息 524 0893 使用一个单行的子查询来更新列 524 0894 使用IN引入子查询限定查询范围 524 0895 在UPDATE语句应用子查询 525 0896 如何应用子查询 525 0897 EXISTS与子查询联合应用 525 0898 在FROM子句的子查询 525 0899 在DELETE语句应用子查询 526 0900 子查询与聚合函数的应用 526 0901 有效使用内连接 526 0902 如何使用LEFT OUTER JOIN查询 526 0903 如何使用RIGHT OUTER JOIN查询 527 0904 利用CASE语句查询结果 527 19.8 交叉表 528 0905 Access利用TRASFORM分析数据 528 0906 Access利用TRASFORM动态分析数据 529 0907 SQL Server实现静态交叉表 529 0908 SQL Server实现动态交叉表 531 19.9 常用数据操作 532 0909 如何对字符串进行查询 532 0910 如何进行单条数据的添加 533 0911 如何进行批量数据的添加 533 0912 如何对数据进行修改 534 0913 如何对数据进行删除 534 0914 对数据库数据进行局部删除 534 19.10 高级应用 535 0915 如何使用临时表 535 0916 如何查询表的列名 535 0917 在查询如何防止输入指定符串 536 0918 查询指定长度的数据 536 0919 获取当前数据库的详细信息 537 0920 在查询过程灵活定义与使用别名 538 19.11 视图、存储过程触发器的使用 538 0921 如何正确认识视图 538 0922 如何获取数据库的全部用户视图 539 0923 如何通过视图修改数据 539 0924 如何正确理解存储过程 540 0925 如何获取数据库的全部存储过程 540 0926 如何正确认识触发器 541 0927 Update触发器在系统日志的应用 542 0928 触发器的嵌套使用 542 0929 获取数据库触发器 543 19.12 其他 544 0930 在查询程序使用变量 544 0931 对查询结果进行排序 544 0932 批量获取结果集信息 545 0933 对查询结果生成表 545 0934 实现数据类型转换 546 0935 获取当前数据库的登录用户名 546 0936 如何正确理解数据库键字 546 0937 将结果转换为XML形式 547 0938 追加查询结果到已存在的表 547 0939 利用对多个表的字段创建新记录集 547 0940 利用EXECUTE执行SQL语句 548 第20章 数据库技术 549 20.1 Access数据库的使用 550 0941 如何为Access数据库设置密码 550 0942 如何创建加密的Access数据库 550 0943 建立Access数据库连接 551 0944 与加密后的Access数据库建立连接 551 0945 如何提取Access数据库的数据表名 551 0946 随机读取Access数据库记录 552 0947 将Access数据库导入到Excel(ASP.NET) 552 0948 在.NET 2.0框架下动态创建Access数据库 553 0949 在.NET 2.0框架下动态创建Access数据表 553 0950 如何备份Access数据库 554 20.2 SQL数据库的使用 554 0951 建立SQL Server数据库连接 554 0952 如何使用ODBC访问SQL Server数据库 555 0953 读取SQL Server数据表结构 556 0954 在C#分离SQL Server数据库 557 0955 C#附加SQL Server数据库 558 0956 C#附加单文件SQL Server数据库 559 0957 备份SQL Server数据库 559 0958 还原SQL Server数据库 560 0959 开启SQL Server数据库服务 561 0960 断开SQL Server数据库服务 562 0961 如何判断SQL Server数据库连接状态 562 0962 获取连接SQL Server数据库的名称 563 0963 获取SQL Server的连接统计数据 563 0964 如何调用SQL Server存储过程 563 0965 如何生成SQL数据库脚本 564 0966 SQL Server 2000无法安装的解决办法 565 20.3 其他 565 0967 如何判断记录是否为NULL 565 0968 建立Oracle数据库连接 566 0969 如何在数据表设置主键 566 0970 DataSet读取XML文件数据作为数据源 567 0971 如何读取Fox的DBF文件 567 0972 通用方法实现数据增、删、改功能 567 0973 通用方法获取查询结果DataSet数据集 568 0974 同时查询多条SQL语句 568 0975 如何判断是否查询到结果 568 0976 将图片以二进制格式存储到数据库(asp.net) 569 0977 从DataReader对象读取数据的技巧 569 0978 随机显示数据库记录 569 0979 通过DataTable获得数据表的主键 569 0980 将Access数据库转化为SQL Server数据库 570 0981 将SQL Server数据库转化为Access数据库 571 0982 如何避免数据库死锁现象 572 0983 如何调用带输入参数的存储过程 572 0984 如何获取存储过程返回的结果集 573 0985 取得数据表某个单元格的值 573 0986 在ASP.NET2.0下将数据绑定DropDownList 573 0987 在ADO.NET实现数据库的事务处理 574 0988 将任意文件保存到数据库 574 0989 将存储在数据库的文件提取出来 575 0990 合并具有相同数据表结构的查询结果 575 0991 使用DataTable进行数据检索 575 0992 使用DataView对数据进行检索和排序 576 0993 使用DataSet建立DataTable明细表 576
Firebird是一个全功能的,强大高效的,轻量级,免维护的数据库。它很容易让您从单用户,单数据库升级到企业级的应用。 一个firebird数据库服务器能够管理多个独立的数据库,每一个数据库同时可支持多个客户端连结。 关键特性:支持原子性,并发性,隔离性等概念。 MGA:支持事务的多个版本功能, 存储过程: 使用PSQL(Procedure SQL),你可以创建强大的存储过程来处理服务上的所有数据,你可以使用select Stored Procedure的形式,使用存储过程,以得到一个虚拟的表结构的结果。这样的话,你就可以很容易的在报表使用它。 事件:存储过程触发器可以引发事件,这个事件可以被客户端程序监听到 生成子:生成子也称为序列,它可以很容易的实现自动增加的字段。它是一个INT64的长度,因此,它可以用在一个事务,也可以用在其它很多方面。 只读数据库: 我们可以把数据库存放在CD,形成一个只读数据库。如果我们的应用程序 也在光盘上,再加上嵌入式的FB数据库服务器,便可以得到一个无与伦比的 CDLIVE(即只用光盘就可以运行起来)应用。 全事务控制: 一个客户端可以存在多个并发的事务。并且每一个事务都可以独立的进行控制,两段提交功能可以保证数据库的一致性。锁优化机制也支持多个事务的保存点。 在线备份: 不需要停止数据库即可进行备份,一个备份进程产生一个数据库当前的快照。因此,用户可以在备份期间持续的工作,即实现24x7(每天24小时,每周7天) 的操作。 触发器: 每一个表可以有多个并发的行级触发器,可以在插入前,插入后,更新前,更新后,删除前,删除后进行触发。我们可以在触发器写入PSQL语句,默认值,产生异常,firebird现在支持统一触发器,即可以一个触发器,一次性管理插入,更新,删除的操作。 扩展函数: 我们可以使用C语言,C++,DELPHI写UDF,使用UDF(用户定义函数库)可以很容易的挂入数据库引擎以扩展我们需要的功能 字符集:Firebird实现了很多国际标准的字符集,包括Unicode。 SQL标准兼容:Firebird 实现了全部SQL92所要求的功能,实现了SQL99最常用的的要求。包括但不限于"FULL/LEFT/RIGHT [OUTER] JOIN , UNION, DISTINCT , 子查询 (IN, EXISTS),内部函数 (AVG, SUM, MIN, MAX, COALESCE, CASE, ..), 主键,外键,唯一索引以及所有通用的数据类型。 Firebird还实现了域,字段级别的约束,视图,异常,规则和权限管理,更多的详细信息,请参考Firebird发布通知和参考手册。 硬件需求: Firebird可以工作最常见的硬件环境,甚至非常差的硬件,也能很好的工作,当然,硬件的要求依赖于你想做什么,例如 ,你有多少个并发用户等等。 有效的平台支持: Firebrid在常见的平台上都可运行,如Linux和Windows(包括Windows终端服务器)其它支持的平台包括(MAC OS(苹果机), Solaris及HP-UX) 把数据库从一个平台转到另一个平台,非常的容易,只要备份数据库,然后,再到另一个平台上恢复即可 可连接性: Firebird 支持一系列的连接方法,目前,可以通过原生的DELPHI,C++组件连接,也可以通过ODBC,JDBC,PHP,OLEDB,DbExpress进行连接。原生 的联连提供了直接调用Firebird的API函数库(fbclient.dll/.so)进行调用的能力。 物理限制: Firebird支持非常巨大的数据库,数据库可以分成多个物理文件。每个文件的大小依赖于操作系统的限制。当前一个数据库文件最大的理论限制是64T (即64000G),因此,常见的限制通常是操作系统的限制以及磁盘空间的限制。 服务器引擎版本: 当前有三个服务器版本。 标准服务器:每一个客户连接将引发一个服务器进程(支持多处理器) 超级服务器:一相服务器进程模块管理所有的客户端连接,当前不支持多处理器。 嵌入服务器:整个服务器引擎就是一个动态库,只支持本地通过IO进行调用。 但是,所有的服务器都使用一种数据库格式,因此,你可以很方便的在不同的引擎之间共享数据库文件的数据。 协议: Firebird协议使用IPL(interbase public license)和IDPL(Initial Developer's Public License),这种协议类似于Mozilla协议。你可以完全的自由使用并且可以自由的布署在你的客户应用上。 你不需要公开你的源代码。当然,如果你修改和数据库引擎,你应该公布源代码。 工具: 有很多的工具支持Firebird.包括自由的,免费的和商业的。 包括开发工具,管理工具,诊断工具等等。
PL/SQL Developer是一个集成开发环境,专门面向Oracle数据库存储程序单元的开发。如今,有越来越多的商业逻辑和应用逻辑转向了Oracle Server,因此,PL/SQL编程也成了整个开发过程的一个重要组成部分。PL/SQL Developer侧重于易用性、代码品质和生产力,充分发挥Oracle应用程序开发过程的主要优势。     PL/SQL Developer v8.0主要特性: PL/SQL编辑器,功能强大——该编辑器具有语法加强、SQL和PL/SQL帮助、对象描述、代码助手、编译器提示、PL/SQL完善、代码内容、代码分级、浏览器按钮、超链接导航、宏库等许多智能特性,能够满足要求性最高的用户需求。当您需要某个信息时,它将自动出现,至多单击即可将信息调出。 集成调试器(要求Oracle 7.3.4或更高)——该调试器提供您所需要的全部特性:跳入(Step In)、跳过(Step Over)、跳出(Step Out)、异常时停止运行、断点、观察和设置变量、观察全部堆栈等。基本能够调试任何程序单元(包括触发器和Oracle8 对象类型),无需作出任何修改。 PL/SQL完善器——该完善器允许您通过用户定义的规则对SQL和PL/SQL代码进行规范化处理。在编译、保存、打开一个文件时,代码将自动被规范化。该特性提高了您编码的生产力,改善了PL/SQL代码的可读性,促进了大规模工作团队的协作。 SQL 窗口——该窗口允许您输入任何SQL语句,并以栅格形式对结果进行观察和编辑,支持按范例查询模式,以便在某个结果集合查找特定记录。另外,还含有历史缓存,您可以轻松调用先前执行过的SQL语句。该SQL编辑器提供了同PL/SQL编辑器相同的强大特性。 命令窗口——使用PL/SQL Developer 的命令窗口能够开发并运行SQL脚本。该窗口具有同SQL*Plus相同的感观,另外还增加了一个内置的带语法加强特性的脚本编辑器。这样,您就可以开发自己的脚本,无需编辑脚本/保存脚本/转换为SQL*Plus/运行脚本过程,也不用离开PL/SQL Developer集成开发环境。 报告——PL/SQL Developer提供内置的报告功能,您可以根据程序数据或Oracle字典运行报告。PL/SQL Developer本身提供了大量标准报告,而且您还可以方便的创建自定义报告。自定义报告将被保存在报告文件,进而包含在报告菜单内。这样,运行您自己经常使用的自定义报告就非常方便。 您可以使用Query Reporter免费软件工具来运行您的报告,不需要PL/SQL Developer,直接从命令行运行即可。 工程——PL/SQL Developer内置的工程概念可以用来组织您的工作。一个工程包括源文件集合、数据库对象、notes和选项。PL/SQL Developer允许您在某些特定的条目集合范围之内进行工作,而不是在完全的数据库或架构之内。这样,如果需要编译所有工程条目或者将工程从某个位置或数据库移动到其他位置时,所需工程条目的查找就变得比较简单, To-Do条目——您可以在任何SQL或PL/SQL源文件使用To-Do条目快速记录该文件那些需要进行的事项。以后能够从To-Do列表访问这些信息,访问操作可以在对象层或工程层进行。 对象浏览器——可配置的树形浏览能够显示同PL/SQL开发相关的全部信息,使用该浏览器可以获取对象描述、浏览对象定义、创建测试脚本以便调试、使能或禁止触发器或约束条件、重新编译不合法对象、查询或编辑表格、浏览数据、在对象源进行文本查找、拖放对象名到编辑器等。 此外,该对象浏览器还可以显示对象之间的依存关系,您可以递归的扩展这些依存对象(如包参考检查、浏览参考表格、图表类型等)。 性能优化——使用PL/SQL Profiler,可以浏览每一执行的PL/SQL代码行的时序信息(Oracle8i或更高),从而优化您SQL和PL/SQL的代码性能。 更进一步,您还可以自动获取所执行的SQL语句和PL/SQL程序统计信息。该统计信息包括CPU使用情况、块I/O、记录I/O、表格扫描、分类等。 HTML指南——Oracle目前支持HTML格式的在线指南。您可以将其集成到PL/SQL Developer工作环境,以便在编辑、编译出错或运行时出错时提供内容敏感帮助。 非PL/SQL对象——不使用任何SQL,您就可以对表格、序列、符号、库、目录、工作、队列、用户和角色进行浏览、创建和修改行为。PL/SQL Developer提供了一个简单易用的窗体,只要将信息输入其,PL/SQL Developer就将生成相应的SQL,从而创建或转换对象。 模板列表——PL/SQL Developer的模板列表可用作一个实时的帮助组件,协助您强制实现标准化。只要点击相应的模板,您就可以向编辑器插入标准的SQL或PL/SQL代码,或者从草稿出发来创建一个新程序。 查询构建器——图形化查询构建器简化了新选择语句的创建和已有语句的修改过程。只要拖放表格和视窗,为区域列表选择专栏,基于外部键约束定义联合表格即可。 比较用户对象——对表格定义、视图、程序单元等作出修改后,将这些修改传递给其他数据库用户或检查修改前后的区别将是非常有用的。这也许是一个其他的开发环境,如测试环境或制作环境等。而比较用户对象功能则允许您对所选对象进行比较,将不同点可视化,并运行或保存应用必要变动的SQL脚本。 导出用户对象——该工具可以导出用户所选对象的DDL(数据定义语言)语句。您可以方便的为其他用户重新创建对象,也可以保存文件作为备份。 工具——PL/SQL Developer为简化日常开发专门提供了几种工具。使用这些工具,您可以重新编译全部不合法对象、查找数据库源文本、导入或导出表格、生成测试数据、导出文本文件、监控dbms_alert和dbms_pipe事件、浏览会话信息等。 授权——大多数开发环境,您不希望所有数据库都具备PL/SQL Developer的全部功能性。例如,数据库开发您可以允许PL/SQL Developer的全部功能性,而数据库测试您可以仅允许数据查询/编辑和对象浏览功能,而数据库制作您甚至根本不希望PL/SQL Developer访问。利用PL/SQL Developer授权功能,您可以方便的定义特定用户或规则所允许使用的功能。 插件扩展——可以通过插件对PL/SQL Developer功能进行扩展。Add-ons页面提供插件可以免费下载。Allround Automations或其他用户均可提供插件(如版本控制插件或plsqldoc插件)。如果您具备创建DLL的编程语言,您还可以自己编写插件。 多线程IDE——PL/SQL Developer是一个多线程IDE。这样,当SQL查询、PL/SQL程序、调试会话等正在运行时,您依然可以继续工作。而且,该多线程IDE还意味着出现编程错误时不会止:您在任何时间都可以断执行或保存您的工作。 易于安装——不同于SQL*Net,无需间件,也无需数据库对象安装。只需点击安装程序按钮,您就可以开始安装从而使用软件了。

17,082

社区成员

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

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