ora2

合集下载

Oracle在命令窗口ORA错误提示相关说明(下)

Oracle在命令窗口ORA错误提示相关说明(下)

Oracle 使用PLSQL或sqlplus中脚本窗口和sql窗口提示ORA错误相关说明(下) 前言:在Oracle 使用PLSQL或sqlplus中脚本窗口和sql窗口等时候,我们需要输入sql语句或者Oracle自带的程序设置、脚本命令时候,一旦出现错误或者命令未结束,都会弹出相关提示,根据提示我在这里进行汇总。

我是HadesZ 相关计算机类学习可联系1107712415以下为ORA提示的相关记录,主要是从网站上收集汇总:ORA-20005:对象的统计数据都是锁着的说明:统计信息锁着,无法导入报错,大多由不同Oracle版本间EXP\IMP引起。

解决:待imp结束后,先执行DBMS_STATS.UNLOCK_TABLE_STATS('MID_SC','DM_OLD_FEATURE_VALUE');再analyze table即可。

ORA-22992: 无法使用从远程表选择的LOB 定位器说明:当通过DBLINK连接数据库,select的表有CLOB字段的时候,就会报这个错。

解决办法在数据库新建一张临时表把数据插进去。

ORA-22813:操作数值超出系统的限制说明:select wm_concat(TECH_OBJECT_NAME) TECH_OBJECT_NAME from PROD_EXPERIMENT_OBJECT@zwsc_gz,合并完之后TECH_OBJECT_NAME字段长度超过4000ORA-27101:shared memory realm does not existORA-25156:旧样式的外部联接(+)不能与ANSI联接一起使用说明:当新式外部联接(例如left join)和旧式外部联接(例如 a.g3e_fid = b.g3e_fid(+))一起使用,就会报此类错误。

解决:全部改为新式外部联接。

ORA-27486:权限不足ORA-28000:账号已被锁定解决1:alter profile default limit FAILED_LOGIN_ATTEMPTS 20;--设置为错误20次才锁定ORA-28002:the password will expire within 10 days.密码将在10天内到期。

ora2pg简单使用

ora2pg简单使用

ora2pg简单使⽤ora2pg是⼀款免费迁移⼯具,能将oracle迁移到pg,简单使⽤并记录过程如下环境:虚拟机 oracle linux 7.7oracle 11GR2 11.2.0.4pg 13.1Ora2Pg v21.01.安装ora2pg1.1ora2pg是Perl语⾔编写的,所以需要先安装相关环境依赖[root@localhost ~]$ yum install -y perl perl-ExtUtils-CBuilder perl-ExtUtils-MakeMakerLoaded plugins: langpacks, ulninfoResolving Dependencies--> Running transaction check---> Package perl.x86_64 4:5.16.3-294.el7_6 will be updated---> Package perl.x86_64 4:5.16.3-297.el7 will be an update(省略中间...)Dependency Installed:gdbm-devel.x86_64 0:1.10-8.el7 libdb-devel.x86_64 0:5.3.21-25.el7 perl-ExtUtils-Install.noarch 0:1.58-297.el7 perl-ExtUtils-Manifest.noarch 0:1.61-244.el7perl-ExtUtils-ParseXS.noarch 1:3.18-3.el7 perl-IPC-Cmd.noarch 1:0.80-4.el7 perl-Locale-Maketext.noarch 0:1.23-3.el7 perl-Locale-Maketext-Simple.noarch 1:0.21-297.el7perl-Module-CoreList.noarch 1:2.76.02-297.el7 perl-Module-Load.noarch 1:0.24-3.el7 perl-Module-Load-Conditional.noarch 0:0.54-3.el7 perl-Module-Metadata.noarch 0:1.000018-2.el7 perl-Params-Check.noarch 1:0.38-2.el7 perl-Perl-OSType.noarch 0:1.003-3.el7 perl-Test-Harness.noarch 0:3.28-3.el7 perl-devel.x86_64 4:5.16.3-297.el7perl-version.x86_64 3:0.99.07-6.el7 pyparsing.noarch 0:1.5.6-9.el7 systemtap-sdt-devel.x86_64 0:4.0-13.0.1.el7Updated:perl.x86_64 4:5.16.3-297.el7Dependency Updated:perl-libs.x86_64 4:5.16.3-297.el7Complete![root@localhost ~]$1.2DBI,Database Independent Interface,是Perl语⾔连接数据库的接⼝然后解压安装[root@localhost /usr/local]$ tar -xzvf DBI-1.643.tar.gz[root@localhost /usr/local/DBI-1.643]$ cd DBI-1.643/[root@localhost /usr/local/DBI-1.643]$ perl Makefile.PL[root@localhost /usr/local/DBI-1.643]$ make[root@localhost /usr/local/DBI-1.643]$ make install1.3添加环境变量export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1export PATH=$PATH:$ORACLE_HOME/binexport LD_LIBRARY_PATH=/u01/app/oracle/product/11.2.0/dbhome_1/lib[root@localhost /usr/local/DBD-Oracle-1.74]$ tar -zxvf DBD-Oracle-1.74.tar.gz[root@localhost /usr/local/DBD-Oracle-1.74]$ cd DBD-Oracle-1.74/[root@localhost /usr/local/DBD-Oracle-1.74]$ perl Makefile.PL[root@localhost /usr/local/DBD-Oracle-1.74]$ make[root@localhost /usr/local/DBD-Oracle-1.74]$ make install1.4[root@localhost /usr/local]$ cd DBD-Pg-3.14.2/[root@localhost /usr/local]$ perl Makefile.PL[root@localhost /usr/local]$ make[root@localhost /usr/local]$ make install1.5[root@localhost /usr/local]$ cd ora2pg-21.0/[root@localhost /usr/local/ora2pg-21.0]$ lschangelog doc INSTALL lib LICENSE Makefile.PL MANIFEST packaging README scripts[root@localhost /usr/local/ora2pg-21.0]$ perl Makefile.PLChecking if your kit is complete...Looks goodWriting Makefile for Ora2PgDone...------------------------------------------------------------------------------Please read documentation at / before asking for help------------------------------------------------------------------------------Now type: make && make install[root@localhost /usr/local/ora2pg-21.0]$ makecp lib/Ora2Pg.pm blib/lib/Ora2Pg.pmcp lib/Ora2Pg/GEOM.pm blib/lib/Ora2Pg/GEOM.pmcp lib/Ora2Pg/PLSQL.pm blib/lib/Ora2Pg/PLSQL.pmcp lib/Ora2Pg/MySQL.pm blib/lib/Ora2Pg/MySQL.pmcp scripts/ora2pg blib/script/ora2pg/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/ora2pgcp scripts/ora2pg_scanner blib/script/ora2pg_scanner/usr/bin/perl -MExtUtils::MY -e 'MY->fixin(shift)' -- blib/script/ora2pg_scannerManifying blib/man3/ora2pg.3[root@localhost /usr/local/ora2pg-21.0]$ make installInstalling /usr/local/share/perl5/Ora2Pg.pmInstalling /usr/local/share/perl5/Ora2Pg/GEOM.pmInstalling /usr/local/share/perl5/Ora2Pg/PLSQL.pmInstalling /usr/local/share/perl5/Ora2Pg/MySQL.pmInstalling /usr/local/share/man/man3/ora2pg.3Installing /usr/local/bin/ora2pgInstalling /usr/local/bin/ora2pg_scannerInstalling default configuration file (ora2pg.conf.dist) to /etc/ora2pgAppending installation info to /usr/lib64/perl5/perllocal.pod[root@localhost /usr/local/ora2pg-21.0]$1.6[root@localhost ~]$ cat check.pl#!/usr/bin/perluse strict;use ExtUtils::Installed;my $inst=ExtUtils::Installed->new();my @modules = $inst->modules();foreach(@modules){my $ver = $inst->version($_) || "";printf("%-12s -- %s\n",$_,$ver);}exit;[root@localhost ~]$ perl check.plDBD::Oracle -- 1.74DBD::Pg -- 3.14.2DBI -- 1.643Ora2Pg -- 21.0Perl -- 5.16.3测试⼀下[root@localhost ~]$ cat ora2pg_table.confORACLE_HOME /u01/app/oracle/product/11.2.0/dbhome_1ORACLE_DSN dbi:Oracle:host=192.168.168.3;sid=orclORACLE_USER sysORACLE_PWD oracleSCHEMA scottTYPE TABLEPG_NUMERIC_TYPE 0PG_INTEGER_TYPE 1DEFAULT_NUMERIC floatSKIP fkeys pkeys ukeys indexes checksNLS_LANG AMERICAN_AMERICA.UTF8OUTPUT /root/ora2pg/table.sql[root@localhost ~]$ ora2pg -t SHOW_VERSION -c ora2pg_table.confWARNING: target PostgreSQL version must be set in PG_VERSION configuration directive. Using default: 11 Oracle Database 11g Enterprise Edition Release 11.2.0.4.0[root@localhost ~]$2. 简单使⽤oracle以scott这个schema为例,做迁移2.12.1.1 编写配置⽂件创建ora2pg_table.conf,导出表结构的配置⽂件,内容见测试部分创建ora2pg_data.conf,导出数据,内容如下[root@localhost ~]$ cat ora2pg_data.confORACLE_HOME /u01/app/oracle/product/11.2.0/dbhome_1ORACLE_DSN dbi:Oracle:host=192.168.168.3;sid=orclORACLE_USER systemORACLE_PWD oracleSCHEMA scottTYPE COPYPG_NUMERIC_TYPE 0PG_INTEGER_TYPE 1DEFAULT_NUMERIC floatSKIP fkeys pkeys ukeys indexes checksNLS_LANG AMERICAN_AMERICA.UTF8OUTPUT /root/ora2pg/data.sql[root@localhost ~]$2.1.2 导出数据执⾏导出命令,导出表结构和数据[root@localhost ~]$ ora2pg -c ora2pg_table.confWARNING: target PostgreSQL version must be set in PG_VERSION configuration directive. Using default: 11 [========================>] 4/4 tables (100.0%) end of scanning.[========================>] 4/4 tables (100.0%) end of table export.Fixing function calls in output files...[root@localhost ~]$ ora2pg -c ora2pg_data.confWARNING: target PostgreSQL version must be set in PG_VERSION configuration directive. Using default: 11 [========================>] 4/4 tables (100.0%) end of scanning.[========================>] 0/0 rows (100.0%) Table BONUS (0 recs/sec)[> ] 0/23 total rows (0.0%) - (0 sec., avg: 0 recs/sec).[========================>] 4/4 rows (100.0%) Table DEPT (4 recs/sec)[====> ] 4/23 total rows (17.4%) - (0 sec., avg: 4 recs/sec).[========================>] 14/14 rows (100.0%) Table EMP (14 recs/sec)[==================> ] 18/23 total rows (78.3%) - (0 sec., avg: 18 recs/sec).[========================>] 5/5 rows (100.0%) Table SALGRADE (5 recs/sec)[========================>] 23/23 total rows (100.0%) - (0 sec., avg: 23 recs/sec).[========================>] 23/23 rows (100.0%) on total estimated data (1 sec., avg: 23 recs/sec) Fixing function calls in output files...查看导出的sql[root@localhost ~]$ cd ora2pg/[root@localhost ~/ora2pg]$ lsdata.sql table.sql[root@localhost ~/ora2pg]$ cat table.sql-- Generated by Ora2Pg, the Oracle database Schema converter, version 21.0-- Copyright 2000-2020 Gilles DAROLD. All rights reserved.-- DATASOURCE: dbi:Oracle:host=192.168.168.3;sid=orclSET client_encoding TO 'UTF8';\set ON_ERROR_STOP ONSET check_function_bodies = false;CREATE TABLE bonus (ename varchar(10),job varchar(9),sal float,comm float) ;CREATE TABLE dept (deptno smallint NOT NULL,dname varchar(14),loc varchar(13)) ;CREATE TABLE emp (empno smallint NOT NULL,ename varchar(10),job varchar(9),mgr smallint,hiredate timestamp,sal decimal(7,2),comm decimal(7,2),deptno smallint) ;CREATE TABLE salgrade (grade float,losal float,hisal float) ;[root@localhost ~/ora2pg]$ cat data.sqlBEGIN;COPY bonus (ename,job,sal,comm) FROM STDIN;\.COPY dept (deptno,dname,loc) FROM STDIN;10 ACCOUNTING NEW YORK20 RESEARCH DALLAS30 SALES CHICAGO40 OPERATIONS BOSTON\.COPY emp (empno,ename,job,mgr,hiredate,sal,comm,deptno) FROM STDIN; 7369 SMITH CLERK 7902 1980-12-17 00:00:00 800 \N 207499 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 7521 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30 7566 JONES MANAGER 7839 1981-04-02 00:00:00 2975 \N 207654 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30 7698 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 \N 307782 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 \N 107788 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 \N 207839 KING PRESIDENT \N 1981-11-17 00:00:00 5000 \N 10 7844 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30 7876 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 \N 207900 JAMES CLERK 7698 1981-12-03 00:00:00 950 \N 307902 FORD ANALYST 7566 1981-12-03 00:00:00 3000 \N 207934 MILLER CLERK 7782 1982-01-23 00:00:00 1300 \N 10\.COPY salgrade (grade,losal,hisal) FROM STDIN;1 700 12002 1201 14003 1401 20004 2001 30005 3001 9999\.COMMIT;[root@localhost ~/ora2pg]$2.1.3 导⼊到pg[root@localhost ~/ora2pg]$ psql postgres postgres -f table.sqlSETSETCREATE TABLECREATE TABLECREATE TABLECREATE TABLE[root@localhost ~/ora2pg]$ psql postgres postgres -f data.sqlBEGINCOPY 0COPY 4COPY 14COPY 5COMMIT⽤navicat查看表和表中数据是否已经在pg中存在表结构和表数据迁移过去了2.2oracle建⽴测试视图类似迁移表,配置⽂件的type改为VIEW即可oracle的scott⽤户下没有视图,我创建个测试视图[oracle@localhost ~]$ sqlplus scott/tigerSQL*Plus: Release 11.2.0.4.0 Production on Tue Dec 22 11:10:06 2020 Copyright (c) 1982, 2013, Oracle. All rights reserved.Connected to:Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 11:10:06 SCOTT@orcl> create or replace view view_test as11:10:16 2 select b.dname,sum(a.sal) sal11:10:16 3 from emp a11:10:16 4 join dept b on a.deptno=b.deptno11:10:16 5 group by b.dname;View created.Elapsed: 00:00:00.0111:10:18 SCOTT@orcl> select * from view_test;DNAME SAL-------------- ----------ACCOUNTING 8750RESEARCH 10875SALES 9400Elapsed: 00:00:00.0011:10:28 SCOTT@orcl>编辑配置⽂件并迁移过程如下[root@localhost ~]$ cat ora2pg_view.confORACLE_HOME /u01/app/oracle/product/11.2.0/dbhome_1ORACLE_DSN dbi:Oracle:host=192.168.168.3;sid=orclORACLE_USER sysORACLE_PWD oracleSCHEMA scottTYPE VIEWPG_NUMERIC_TYPE 0PG_INTEGER_TYPE 1DEFAULT_NUMERIC floatSKIP fkeys pkeys ukeys indexes checksNLS_LANG AMERICAN_AMERICA.UTF8OUTPUT /root/ora2pg/view.sql[root@localhost ~]$ ora2pg -c ora2pg_view.confWARNING: target PostgreSQL version must be set in PG_VERSION configuration directive. Using default: 11 [========================>] 1/1 views (100.0%) end of output.Fixing function calls in output files...[root@localhost ~]$ cd ora2pg/[root@localhost ~/ora2pg]$ lsdata.sql table.sql view.sql[root@localhost ~/ora2pg]$ cat view.sql-- Generated by Ora2Pg, the Oracle database Schema converter, version 21.0-- Copyright 2000-2020 Gilles DAROLD. All rights reserved.-- DATASOURCE: dbi:Oracle:host=192.168.168.3;sid=orclSET client_encoding TO 'UTF8';\set ON_ERROR_STOP ONSET check_function_bodies = false;CREATE OR REPLACE VIEW view_test (dname, sal) AS SELECT b.dname,sum(a.sal) salFROM emp ajoin dept b on a.deptno=b.deptnogroup by b.dname;[root@localhost ~/ora2pg]$ psql postgres postgres -f view.sqlSETSETCREATE VIEW到pg中查看已经有了这个视图了2.32.3.1 oracle建⽴测试存储过程14:15:29 SYS@orcl> conn scott/tiger;Connected.14:15:37 SCOTT@orcl> CREATE OR REPLACE PROCEDURE p_jsq_test as14:15:39 2 begin14:15:39 3 insert into emp(empno,ename) values ('1','king');14:15:39 4 commit;14:15:39 5 end;14:15:45 6 /Procedure created.Elapsed: 00:00:00.0214:15:46 SCOTT@orcl>2.3.2 迁移过程[root@localhost ~]$ cat ora2pg_procedure.confORACLE_HOME /u01/app/oracle/product/11.2.0/dbhome_1ORACLE_DSN dbi:Oracle:host=192.168.168.3;sid=orclORACLE_USER sysORACLE_PWD oracleSCHEMA scottTYPE PROCEDUREPG_NUMERIC_TYPE 0PG_INTEGER_TYPE 1DEFAULT_NUMERIC floatSKIP fkeys pkeys ukeys indexes checksNLS_LANG AMERICAN_AMERICA.UTF8OUTPUT /root/ora2pg/procedure.sql[root@localhost ~]$ ora2pg -c ora2pg_procedure.confWARNING: target PostgreSQL version must be set in PG_VERSION configuration directive. Using default: 11 [========================>] 1/1 procedures (100.0%) end of procedures export.Fixing function calls in output files...[root@localhost ~]$ cd ora2pg/[root@localhost ~/ora2pg]$ lsdata.sql procedure.sql table.sql view.sql[root@localhost ~/ora2pg]$ cat procedure.sql-- Generated by Ora2Pg, the Oracle database Schema converter, version 21.0-- Copyright 2000-2020 Gilles DAROLD. All rights reserved.-- DATASOURCE: dbi:Oracle:host=192.168.168.3;sid=orclSET client_encoding TO 'UTF8';\set ON_ERROR_STOP ONSET check_function_bodies = false;CREATE OR REPLACE PROCEDURE p_jsq_test () AS $body$BEGINinsert into emp(empno,ename) values ('1','king');commit;end;$body$LANGUAGE PLPGSQLSECURITY DEFINER;-- REVOKE ALL ON PROCEDURE p_jsq_test () FROM PUBLIC;[root@localhost ~/ora2pg]$ psql postgres postgres -f procedure.sqlSETSETCREATE PROCEDURE[root@localhost ~/ora2pg]$迁移到pg就变成函数了其他object迁移⽅法类似,就不⼀⼀体验了2.4ora2pg将检查所有object来估算迁移成本和难易程度[root@localhost ~]$ ora2pg -t SHOW_REPORT --estimate_cost -c ora2pg_data.confWARNING: target PostgreSQL version must be set in PG_VERSION configuration directive. Using default: 11[========================>] 4/4 tables (100.0%) end of scanning.[========================>] 8/8 objects types (100.0%) end of objects auditing.-------------------------------------------------------------------------------Ora2Pg v21.0 - Database Migration Report-------------------------------------------------------------------------------Version Oracle Database 11g Enterprise Edition Release 11.2.0.4.0Schema SCOTTSize 0.31 MB-------------------------------------------------------------------------------Object Number Invalid Estimated cost Comments Details-------------------------------------------------------------------------------DATABASE LINK 0 0 0.00 Database links will be exported as SQL/MED PostgreSQL's Foreign Data Wrapper (FDW) extensions using oracle_fdw.GLOBAL TEMPORARY TABLE 0 0 0.00 Global temporary table are not supported by PostgreSQL and will not be exported. You will have to rewrite some application code to match the PostgreSQL temporary table INDEX 2 0 1.20 2 index(es) are concerned by the export, others are automatically generated and will do so on PostgreSQL. Bitmap will be exported as btree_gin index(es). Domain index are exported as b-tree bu JOB 0 0 0.00 Job are not exported. You may set external cron job with them.PROCEDURE 1 0 4.00 Total size of procedure code: 96 bytes. p_jsq_test: 3.SYNONYM 0 0 0.00 SYNONYMs will be exported as views. SYNONYMs do not exists with PostgreSQL but a common workaround is to use views or set the PostgreSQL search_path in your session to access objec TABLE 4 0 1.00 Total number of rows: 23. Top 10 of tables sorted by number of rows:. emp has 14 rows. salgrade has 5 rows. dept has 4 rows. bonus has 0 rows. Top 10 of largest tables:.VIEW 1 0 1.00 Views are fully supported but can use specific functions.-------------------------------------------------------------------------------Total 8 0 7.20 7.20 cost migration units means approximatively 1 man-day(s). The migration unit was set to 5 minute(s)-------------------------------------------------------------------------------Migration level : A-3-------------------------------------------------------------------------------Migration levels:A - Migration that might be run automaticallyB - Migration with code rewrite and a human-days cost up to 5 daysC - Migration with code rewrite and a human-days cost above 5 daysTechnical levels:1 = trivial: no stored functions and no triggers2 = easy: no stored functions but with triggers, no manual rewriting3 = simple: stored functions and/or triggers, no manual rewriting4 = manual: no stored functions but with triggers or views with code rewriting5 = difficult: stored functions and/or triggers with code rewriting-------------------------------------------------------------------------------Details of cost assessment per functionFunction p_jsq_test total estimated cost: 3TEST => 2SIZE => 1-------------------------------------------------------------------------------[root@localhost ~]$从上述结果看出来scott这个schema迁移到pg属于⽐较简单,迁移成本低的。

oracle操作常见错误

oracle操作常见错误

1.[Err] ORA-02438: Column check constraint cannot reference other columnsORA-02438: 列检查约束条件无法引用其它列--通常可能是constraint 拼写错误2. [Err] ORA-02250: missing or invalid constraint name约束条件名缺失或者无效。

比如:alter table tbl_schooladd s_level number(7) constraint unique; //错误的====add s_level number(7) unique; 正确的4. [Err] ORA-01861: literal does not match format stringORA-01861: 文字与格式字符串不匹配比如:insert into tbl_school(id,s_name,address,establish_time,style)values(1,'清华','北京','1976-05-05','理');日期的输入,要有固定的格式=====values(1,'清华','北京',to_date('1976-05-01','rrrr-mm-dd'),'理');5:select index_name,table_name from user_indexesWhere table_name=’s_emp’;提示错误:为选定行。

‘’里面的就变成了字符串,是区分大小写的,select index_name,table_name from user_indexesWhere table_name=’S_EMP’;6:Ora-02290【】违反检查约束条件可能原因:check里面出错,在传值的时候,出现乱码了,只能重建表7.A.number类型如果是后面带小数点的呢,最好在实体类里面做一下转化。

oracle数据库中ora-报错原因及处理

oracle数据库中ora-报错原因及处理

ORA-00214 控制文件''版本与文件''版本不一致 ORA-00215 必须至少存在一个控制文件 ORA-00216 无法重新调整从8.0.2移植的控制文件大小 ORA-00217 从9.0.1进行移植无法重新调整控制文件的大小 ORA-00218 控制文件的块大小与DB_BLOCK_SIZE()不匹配 ORA-00219 要求的控制文件大小超出了允许的最大值 ORA-00220 第一个例程未安装控制文件,有关详情,请检查警告日志 ORA-00221 写入控制文件出错 ORA-00222 操作将重新使用当前已安装控制文件的名称 ORA-00223 转换文件无效或版本不正确 ORA-00224 控制文件重设大小尝试使用非法记录类型() ORA-00225 控制文件的预期大小与实际大小不同 ORA-00226 备用控制文件打开时不允许进行操作 ORA-00227 控制文件中检测到损坏的块:(块,#块) ORA-00228 备用控制文件名长度超出了最大长度 ORA-00229 操作不允许:已挂起快照控制文件入队 ORA-00230 操作不允许:无法使用快照控制文件入队 ORA-00231 快照控制文件未命名 ORA-00232 快照控制文件不存在,已损坏或无法读取 ORA-00233 控制文件副本已损坏或无法读取 ORA-00234 标识或打开快照或复制控制文件时出错 ORA-00235 控制文件固定表因并发更新而不一致 ORA-00236 快照操作不允许:挂上的控制文件为备份文件 ORA-00237 快照操作不允许:控制文件新近创建 ORA-00238 操作将重用属于数据库一部分的文件名 ORA-00250 未启动存档器 ORA-00251 LOG_ARCHIVE_DUPLEX_DEST不能是与字符串相同的目的地 ORA-00252 日志在线程上为空,无法存档 ORA-00253 字符限制在以内,归档目的字符串超出此限制 ORA-00254 存档控制字符串''时出错 ORA-00255 存档日志(线程,序列#)时出错 ORA-00256 无法翻译归档目的字符串 ORA-00257 存档器错误。在释放之前仅限于内部连接 ORA-00258 NOARCHIVELOG模式下的人工存档必须标识日志 ORA-00259 日志(打开线程)为当前日志,无法存档 ORA-00260 无法找到联机日志序列(线程) ORA-00261 正在存档或修改日志(线程)

ORA_常见错误

ORA_常见错误

ORA-00001: 违反唯一约束条件(.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数()ORA-00021: 会话附属于其它某些进程;无法转换会话ORA-00022: 无效的会话ID;访问被拒绝ORA-00023: 会话引用进程私用内存;无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配ORA-00026: 丢失或无效的会话IDORA-00027: 无法删去当前会话ORA-00028: 您的会话己被删去ORA-00029: 会话不是用户会话ORA-00030: 用户会话ID 不存在。

ORA-00031: 标记要删去的会话ORA-00032: 无效的会话移植口令ORA-00033: 当前的会话具有空的移植口令ORA-00034: 无法在当前PL/SQL 会话中ORA-00035: LICENSE_MAX_USERS 不能小于当前用户数ORA-00036: 超过递归SQL () 级的最大值ORA-00037: 无法转换到属于不同服务器组的会话ORA-00038: 无法创建会话: 服务器组属于其它用户ORA-00050: 获取入队时操作系统出错ORA-00051: 等待资源超时ORA-00052: 超出最大入队资源数()ORA-00053: 超出最大入队数ORA-00054: 资源正忙,要求指定NOWAITORA-00055: 超出DML 锁的最大数ORA-00056: 对象'.' 上的DDL 锁以不兼容模式挂起ORA-00057: 超出临时表锁的最大数ORA-00058: DB_BLOCK_SIZE 必须为才可安装此数据库(非) ORA-00059: 超出DB_FILES 的最大值ORA-00060: 等待资源时检测到死锁ORA-00061: 另一个例程设置了不同的DML_LOCKSORA-00062: 无法获得DML 全表锁定;DML_LOCKS 为0 ORA-00063: 超出LOG_FILES 的最大数ORA-00064: 对象过大以至无法分配在此O/S (,)ORA-00065: FIXED_DATE 的初始化失败ORA-00066: LOG_FILES 为但需要成为才可兼容ORA-00067: 值对参数无效;至少必须为ORA-00068: 值对参数无效,必须在和之间ORA-00069: 无法获得锁定-- 禁用了表锁定ORA-00070: 命令无效ORA-00071: 进程号必须介于1 和之间ORA-00072: 进程""不活动ORA-00073: 命令介于和个参数之间时使用ORA-00074: 未指定进程ORA-00075: 在此例程未找到进程""ORA-00076: 未找到转储ORA-00077: 转储无效ORA-00078: 无法按名称转储变量ORA-00079: 未找到变量ORA-00080: 层次指定的全局区域无效ORA-00081: 地址范围[,) 不可读ORA-00082: 的内存大小不在有效集合[1], [2], [4] 之内ORA-00083: 警告: 可能损坏映射的SGAORA-00084: 全局区域必须为PGA, SGA 或UGAORA-00085: 当前调用不存在ORA-00086: 用户调用不存在ORA-00087: 命令无法在远程例程上执行ORA-00088: 共享服务器无法执行命令ORA-00089: ORADEBUG 命令中无效的例程号ORA-00090: 未能将内存分配给群集数据库ORADEBUG 命令ORA-00091: LARGE_POOL_SIZE 至少必须为ORA-00092: LARGE_POOL_SIZE 必须大于LARGE_POOL_MIN_ALLOC ORA-00093: 必须介于和之间ORA-00094: 要求整数值ORA-00096: 值对参数无效,它必须来自之间ORA-00097: 使用Oracle SQL 特性不在SQL92 级中ORA-00099: 等待资源时发生超时,可能是PDML 死锁所致ORA-00100: 未找到数据ORA-00101: 系统参数DISPATCHERS 的说明无效ORA-00102: 调度程序无法使用网络协议ORA-00103: 无效的网络协议;供调度程序备用ORA-00104: 检测到死锁;全部公用服务器已锁定等待资源ORA-00105: 未配置网络协议的调度机制ORA-00106: 无法在连接到调度程序时启动/关闭数据库ORA-00107: 无法连接到ORACLE 监听器进程ORA-00108: 无法设置调度程序以同步进行连接ORA-00111: 由于服务器数目限制在, 所以没有启动所有服务器ORA-00112: 仅能创建多达(最多指定) 个调度程序ORA-00113: 协议名过长ORA-00114: 缺少系统参数SERVICE_NAMES 的值ORA-00115: 连接被拒绝;调度程序连接表已满ORA-00116: SERVICE_NAMES 名过长ORA-00117: 系统参数SERVICE_NAMES 的值超出范围ORA-00118: 系统参数DISPATCHERS 的值超出范围ORA-00119: 系统参数的说明无效ORA-00120: 未启用或安装调度机制ORA-00121: 在缺少DISPATCHERS 的情况下指定了SHARED_SERVERS ORA-00122: 无法初始化网络配置ORA-00123: 空闲公用服务器终止ORA-00124: 在缺少MAX_SHARED_SERVERS 的情况下指定了DISPATCHERS ORA-00125: 连接被拒绝;无效的演示文稿ORA-00126: 连接被拒绝;无效的重复ORA-00127: 调度进程不存在ORA-00128: 此命令需要调度进程名ORA-00129: 监听程序地址验证失败''ORA-00130: 监听程序地址'' 无效ORA-00131: 网络协议不支持注册''ORA-00132: 语法错误或无法解析的网络名称''ORA-00150: 重复的事务处理IDORA-00151: 无效的事务处理IDORA-00152: 当前会话与请求的会话不匹配ORA-00153: XA 库中的内部错误ORA-00154: 事务处理监视器中的协议错误ORA-00155: 无法在全局事务处理之外执行工作ORA-00160: 全局事务处理长度超出了最大值()ORA-00161: 事务处理的分支长度非法(允许的最大长度为)ORA-00162: 外部dbid 的长度超出了最大值()ORA-00163: 内部数据库名长度超出了最大值()ORA-00164: 在分布式事务处理中不允许独立的事务处理ORA-00165: 不允许对远程操作进行可移植分布式自治转换ORA-00200: 无法创建控制文件ORA-00201: 控制文件版本与ORACLE 版本不兼容ORA-00202: 控制文件: ''ORA-00203: 使用错误的控制文件ORA-00204: 读控制文件时出错(块,# 块)ORA-00205: 标识控制文件出错,有关详情,请检查警告日志ORA-00206: 写控制文件时出错(块,# 块)ORA-00207: 控制文件不能用于同一数据库ORA-00208: 控制文件的名称数超出限制ORA-00209: 控制文件块大小不匹配,有关详情,请检查警告日志ORA-00210: 无法打开指定的控制文件ORA-00211: 控制文件与先前的控制文件不匹配ORA-00212: 块大小低于要求的最小大小( 字节)ORA-00213: 不能重新使用控制文件;原文件大小为,还需ORA-00214: 控制文件'' 版本与文件'' 版本不一致ORA-00215: 必须至少存在一个控制文件ORA-00216: 无法重新调整从8.0.2 移植的控制文件大小ORA-00217: 从9.0.1 进行移植无法重新调整控制文件的大小ORA-00218: 控制文件的块大小与DB_BLOCK_SIZE () 不匹配ORA-00219: 要求的控制文件大小超出了允许的最大值ORA-00220: 第一个例程未安装控制文件,有关详情,请检查警告日志ORA-00221: 写入控制文件出错ORA-00222: 操作将重新使用当前已安装控制文件的名称ORA-00223: 转换文件无效或版本不正确ORA-00224: 控制文件重设大小尝试使用非法记录类型()ORA-00225: 控制文件的预期大小与实际大小不同ORA-00226: 备用控制文件打开时不允许进行操作ORA-00227: 控制文件中检测到损坏的块: (块,# 块)ORA-00228: 备用控制文件名长度超出了最大长度ORA-00229: 操作不允许: 已挂起快照控制文件入队ORA-00230: 操作不允许: 无法使用快照控制文件入队ORA-00231: 快照控制文件未命名ORA-00232: 快照控制文件不存在, 已损坏或无法读取ORA-00233: 控制文件副本已损坏或无法读取ORA-00234: 标识或打开快照或复制控制文件时出错ORA-00235: 控制文件固定表因并发更新而不一致ORA-00236: 快照操作不允许: 挂上的控制文件为备份文件ORA-00237: 快照操作不允许: 控制文件新近创建ORA-00238: 操作将重用属于数据库一部分的文件名ORA-00250: 未启动存档器ORA-00251: LOG_ARCHIVE_DUPLEX_DEST 不能是与字符串相同的目的地ORA-00252: 日志在线程上为空,无法存档ORA-00253: 字符限制在以内,归档目的字符串超出此限制ORA-00254: 存档控制字符串'' 时出错ORA-00255: 存档日志(线程, 序列# ) 时出错ORA-00256: 无法翻译归档目的字符串ORA-00257: 存档器错误。

ORA-02290:违反检查约束条件

ORA-02290:违反检查约束条件

ORA-02290:违反检查约束条件最近在执⾏数据归档的存储过程的时候,总是抛出以下异常信息:ORA-02290: check constraint (BZFZ_YC_IA.SYS_C0091946) violated。

这个异常很奇怪,之前没遇到过,⽽且SYS_C0091946在plsql developer中也找不到,猜测可能是有字段不能为空造成的。

但是根据经验字段不能为空应该抛出ORA-01400: cannot insert NULL into ("BZFZ_YC_IA"."HIS_CASE_INFO"."BILLING_STATUS")的异常,⽽且在plsql developer中查看,该字段确实是可为空的,⽽且也没有任何约束。

⼀直纠结了半天,才在⽹上找到⼀些相关信息。

⾸先,oracle数据库的约束有五种类型: 1、主键约束( Primary key, 简称 PK)、 2、⾮空约束( not null , 简称 NN ) 、 3、唯⼀约束( Unique , 简称 UK ) 、4、检查约束( Check , 简称 CK ) 、 5、外键( Foreign key, 简称 FK )。

这⾥的check应该是检查约束。

要确定约束在哪⼀字段上,使⽤sql:select * from user_constraints where table_name='TABLENAME';SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME='TABLENAME';找到SYS_C0091946,删掉即可:ALTER TABLE TABLENAME DROP CONSTRAINT SYS_C0091946。

Oracle错误一览表2

Oracle错误一览表2

ORA-02201: 此处不允许序列(号)ORA-02202: 此群集中不允许添加其它表ORA-02203: 不允许的INITIAL 存储选项ORA-02204: 不允许ALTER, INDEX 和EXECUTE 用于视图ORA-02205: 只有SELECT 和ALTER 权限对序列有效ORA-02206: 重复的INITRANG 选项说明ORA-02207: 无效的INITRANS 选项值ORA-02208: 重复的MAXTRANS 选项说明ORA-02209: 无效的MAXTRANS 选项值ORA-02210: 未指定ALTER TABLE 的选项ORA-02211: 无效的PCTFREE 或PCTUSED 值ORA-02212: 重复的PCTFREE 选项说明ORA-02213: 重复的PCTUSED 选项说明ORA-02214: 重复的BACKUP 选项说明ORA-02215: 重复的表空间名子句ORA-02216: 需要表空间名ORA-02217: 重复的存储选项说明ORA-02218: 无效的INITIAL 存储选项值ORA-02219: 无效的NEXT 存储选项值ORA-02220: 无效的MINEXTENTS 存储选项值ORA-02221: 无效的MAXEXTENTS 存储选项值ORA-02222: 无效的PCTINCREASE 存储选项值ORA-02223: 无效的OPTIMAL 存储选项值ORA-02224: EXECUTE 权限对于表不允许ORA-02225: 只有EXECUTE 和DEBUG 权限对过程有效ORA-02226: 无效的MAXEXTENTS 值(最大允许为: )ORA-02227: 无效的群集名ORA-02228: 重复的SIZE 说明ORA-02229: 无效的SIZE 选项值ORA-02230: 无效的ALTER CLUSTER 选项ORA-02231: 缺少或无效的ALTER DA TABASE 选项ORA-02232: 无效的MOUNT 模式ORA-02233: 无效的CLOSE 模式ORA-02234: 已经记录对此表的更改ORA-02235: 此表已将更改记录在另一表中ORA-02236: 无效的文件名ORA-02237: 无效的文件大小ORA-02238: 文件名列表具有不同的文件数ORA-02239: 存在引用此序列的对象ORA-02240: 无效的OBJNO 或TABNO 值ORA-02241: 必须是EXTENTS (FILE <n> BLOCK <n> SIZE <n>,...) 格式ORA-02242: 未指定ALTER INDEX 的选项ORA-02243: ALTER INDEX 或ALTER MATERIALIZED VIEW 选项无效ORA-02244: 无效的ALTER ROLLBACK SEGMENT 选项ORA-02245: 无效的ROLLBACK SEGMENT 名ORA-02246: 缺少EVENTS 文本ORA-02247: 未指定ALTER SESSION 的选项ORA-02248: 无效的ALTER SESSION 选项ORA-02249: 缺少或无效的MAXLOGMEMBERS 值ORA-02250: 缺少或无效的约束条件名ORA-02251: 此处不允许子查询ORA-02252: 检查未正确结束的约束条件ORA-02253: 此处不允许约束条件说明ORA-02254: 此处不允许DEFAULT <表达式>ORA-02255: obsolete 7.1.5ORA-02256: 要引用的列数必须与已引用道感数匹配ORA-02257: 超出最大列数ORA-02258: 重复或冲突的NULL 和(或)NOT NULL 说明ORA-02259: 重复的UNIQUE/PRIMARY KEY 说明ORA-02260: 表只能具有一个主键ORA-02261: 表中已存在这样的唯一关键字或主键ORA-02262: 对列默认值表达式进行类型检查时, 出现ORA- ORA-02263: 需要指定此列的数据类型ORA-02264: 名称已被一现有约束条件占用ORA-02265: 无法推导引用列的数据类型ORA-02266: 表中的唯一/主键被启用的外部关键字引用ORA-02267: 列类型与引用的列类型不兼容ORA-02268: 引用的表不具有主键ORA-02269: 关键字列不能是LONG 数据类型ORA-02270: 此列列表的唯一或主键不匹配ORA-02271: 表没有这样的约束条件ORA-02272: 约束条件列不能是LONG 数据类型ORA-02273: 此唯一/主键已被某些外部关键字引用ORA-02274: 重复的引用约束条件说明ORA-02275: 此表中已经存在这样的引用约束条件ORA-02276: 默认值类型与列类型不兼容ORA-02277: 无效的序列名ORA-02278: 重复或冲突的ORDER/NOORDER 说明ORA-02279: 重复或冲突的ORDER/NOORDER 说明ORA-02280: 重复或冲突的ORDER/NOORDER 说明ORA-02281: 重复或冲突的ORDER/NOORDER 说明ORA-02282: 重复或冲突的ORDER/NOORDER 说明ORA-02283: 无法改变起始序号ORA-02284: 重复的INCREMENT BY 说明ORA-02285: 重复的START WITH 说明ORA-02286: 未指定ALTER SEQUENCE 的选项ORA-02287: 此处不允许序号ORA-02288: 无效的OPEN 模式ORA-02289: 序列(号)不存在ORA-02290: 违反检查约束条件(.)ORA-02291: 违反完整约束条件(.) - 未找到父项关键字ORA-02292: 违反完整约束条件(.) - 已找到子记录日志ORA-02293: 无法验证(.) - 违反检查约束条件ORA-02294: 无法启用(.) - 约束条件在验证过程中更改ORA-02295: 找到约束条件的多个启用/禁用子句ORA-02296: 无法启用(.) - 找到空值ORA-02297: 无法禁用约束条件(.) - 存在依赖关系ORA-02298: 无法验证(.) - 未找到父项关键字ORA-02299: 无法验证(.) - 未找到重复关键字ORA-02300: 无效的OIDGENERA TORS 值ORA-02301: OIDGENERA TORS 的最大数为255ORA-02302: 无效或缺少类型名ORA-02303: 无法使用类型或表的相关性来删除或取代一个类型ORA-02304: 无效的对象标识文字ORA-02305: 只有EXECUTE, DEBUG 和UNDER权限对类型有效ORA-02306: 无法创建已具有有效相关性的类型ORA-02307: 无法使用REPLACE 选项改变无效类型ORA-02308: 无效的对象类型列选项ORA-02309: 违反原子NULLORA-02310: 超出表中允许的最大列数ORA-02311: 无法使用COMPILE 选项改变具有类型或表相关性的有效类型ORA-02313: 对象类型包含不可查询的类型属性ORA-02315: 默认构造符的参数个数错误ORA-02320: 无法创建嵌套表列的存储表ORA-02322: 无法访问嵌套表列的访问表ORA-02324: THE 子查询的SELECT 列表中存在多列ORA-02327: 无法以数据类型的表达式创建索引ORA-02329: 数据类型的列不能是唯一关键字或主键ORA-02330: 不允许的数据类型说明ORA-02331: 无法创建数据类型为的列的约束条件ORA-02332: 无法对此列的属性创建索引ORA-02333: 无法对此列的属性创建约束条件ORA-02334: 无法推断列类型ORA-02335: 无效的群集列数据类型ORA-02336: 无法访问列属性ORA-02337: 不是对象类型列ORA-02338: 缺少或无效的列约束条件说明ORA-02339: 无效的列说明ORA-02340: 无效的列说明ORA-02342: 取代类型具有编译错误ORA-02344: 无法撤消执行具有表相关性的类型ORA-02345: 无法创建具有基于CURSOR 运算符的列的视图ORA-02347: 无法授权给对象表列ORA-02348: 无法创建具有嵌入LOB 的VARRAY 列ORA-02349: 无效的用户自定义类型- 类型不完整ORA-02351: 记录: 被拒绝- 表, 列上出错ORA-02352: 直接路径连接必须在同类间进行ORA-02353: 多字节字符错误ORA-02354: 字段中出现转换初始化错误ORA-02355: CONSTANT 字段中出现转换错误ORA-02356: 数据库空间耗尽。

oracle2pg用法详解

oracle2pg用法详解

oracle2pg用法詳解Oracle2pg是一个用于将Oracle数据库的数据和结构迁移到PostgreSQL的工具。

以下是Oracle2pg的用法详解:1.安装Oracle2pg:首先,确保已安装Oracle2pg工具。

可以从官方网站或存储库中下载适用于您的操作系统的适当版本,并按照说明进行安装。

2.创建配置文件:在开始迁移之前,需要创建一个配置文件(通常为`ora2pg_table.conf`)。

配置文件包含有关源Oracle数据库和目标PostgreSQL数据库的连接详细信息以及其他相关设置。

3.配置Oracle连接:在配置文件中,提供有关源Oracle 数据库的连接详细信息,包括Oracle数据库的TNS名称、用户名、密码等。

4.配置PostgreSQL连接:在配置文件中,提供有关目标PostgreSQL数据库的连接详细信息,包括主机名、端口、用户名、密码等。

5.定义迁移规则:根据需要,可以在配置文件中定义自定义的迁移规则,例如更改数据类型、重命名列或表等。

这有助于在迁移过程中进行更细粒度的控制。

6.执行迁移:一旦配置文件准备就绪,可以使用以下命令执行迁移:```css./ora2pg-c<配置文件路径>```7.检查迁移结果:迁移完成后,可以登录到目标PostgreSQL数据库,检查已迁移的数据和结构是否符合预期。

确保所有数据都已成功迁移,并且表结构已正确转换。

8.优化和调整:根据需要对目标PostgreSQL数据库进行优化和调整,以确保性能和兼容性。

这可能包括创建索引、调整配置参数或重新定义触发器等。

注意事项:*在执行迁移之前,务必备份源Oracle数据库和目标PostgreSQL数据库,以防数据丢失。

*根据数据量和复杂性,迁移过程可能需要一些时间来完成。

确保在执行迁移时监视进度并处理任何中断或错误。

*Oracle2pg工具不断更新和改进,建议查看官方文档或GitHub存储库以获取最新的功能和用法说明。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

行触发器例
Create or replace trigger generateid Before insert on students For each row Begin Select student_seq.nextval into :new.id from dual; End;
记录-多域单行结构
Declare
type time_type is record
(second integer(2) :=0 , minute integer(2) :=0, hour integer(2) :=0 ) ; time_rec time_type ;
PL/SQL表(数组)-多行单列结构
建立数据库对象-触发器
Create trigger emp_t before update of sal on emp for each row when (old.dno is not null) begin if (:new.sal < = :old.sal) then raise_application_error(… ); end if ; end ;
例三
Declare cursor c1 is select distinct kno from clog; cursor c2 (kindno char(3)) is select * from clog where kno=kindno order by day desc ; i number ; l_d date ; begin
触发器——类型
语句级触发器 行级触发器(for each row)
:old :new
Instead-of触发器
触发器——触发顺序
Before 语句级 Before 行级 DML After 行级 After 语句级
触发器——限制
不能有事务控制语句 调用的过程和函数也不能有事务控制语 句 不能声明long, long raw列 语句级触发器不能使用:old, :new 行级触发器存取变化表与限制例一
DECLARE
tin_rec tin % rowtype ;
v_passwd userlog.passwd % type ; errps EXCEPTION ; BEGIN select * into tin_rec from tin ; select passwd into v_passwd from userlog where userid = tin_rec.ud ;
光标
Oracle 使用Private SQL Area的工作区 执行SQL语句,并保存语句执行结果和 相关的状态信息。 光标是一个PL/SQL结构,利用光标可以 命名这些工作区,并通过光标访问工作 区中的信息。
隐式光标
隐式光标名:SQL
访问:
SQL%ROWCOUNT
SQL%FOUND
SQL%NOTFOUND
PL/SQL块中特殊的例外转移
Declare段发生例外
V_Number NUMBER(3) :=‘ABC’;
立刻传播到包含块
Exception段发生例外
Excepion when a then raise b; when b then 立刻传播到包含块
利用PL/SQL块中特殊的例外转移 Declare a exception; Begin raise a; Exception when a then insert into log_able…..; raise; End;
例二
Begin open c1; select sum(sal) into s_sal from emp ; while s_sal<500000 loop fetch c1 into e_eno,e_sal ; exit when c1%notfound ; update emp set sal=sal*1.1 where current of c1 ;; where eno=e_eno s_sal:=s_sal + e_sal*0.1; emp_num:=emp_num+1 ; end loop ;
Declare type ename_type is table of char(10) index by binary_integer ; ename_array ename_type ; I binary_integer :=0 ; begin for rec in (select ename from emp) loop I:=I+1 ; ename_array(I):=rec.ename ; end loop ;
PL/SQL表——属性
student_array.count student_array.delete(I); student_array.delete(I , j ); student_array.exists student_array.first student_st student_array.next student_array.prior
[for each row]
on emp [when …]
begin … end ;
建立数据库对象-触发器
Create trigger emp_check before/after/instead of insert or update or delete on emp begin if to_char(sysdate,`dy`)=`星期日` then raise_application_error(-20000, ‘ today is holiday ') ; end if ; end ; /
dup_val_on_index no_data_found too_many_rows
Select * into …
用户自定义例外
例外名定义 ex1 exception ; 引起例外 raise ex1 ;
例一
用户注册检查
tin :
Ud msg
ps
tout :
userlog :
触发器
存储在数据库里的带名的PL/SQL块,当 表被修改时,如果满足条件,自动执行 主要用处
维护复杂的完整性约束 审计修改 表被修改时,给其他需运行的程序发信号
触发器——创建语法
Create or Replace trigger emp_check
before/after insert or update or delete
例二
Close c1;
insert into msg values(emp_num , s_sal) ;
commit ; end;
光标for循环
For r in c1
loop
r.sal
end loop;
如何打开光标 如何读光标区 如何判断读完 如何关闭光标
带参数光标
cursor c1 (depno char(3)) is select * from emp where dno=depno ;
例外信息捕获
Exception when others then err_msg:=substr(sqlerrm,1,50); err_code:=sqlcode; insert into tout values(err_code,err_msg) ; end ;
PL/SQL块的嵌套及例外转移 D01部门没有职工属正常情况… begin select eno into v_eno from emp where dno=`d01` ; if sql%found then raise too_many_rows ; end if ; exception when no_data_found then null ; end ;
变量赋值 an_sal :=mon_sal *12 + nvl(comm,0) ;
Select ename INTO v_ename from emp where eno=` e01 ` ;
程序控制结构
IF e1 THEN ELSIF e2 THEN END LOOP ; WHILE LOOP e
例一
if tin_rec.ps = v_passwd then insert into tout values(`login ok` ); else raise errps ; end if ; exception when errps then insert into tout values(`password error`〕; when no_data_found then insert into tout values(`userid error’〕; end;
open c1(v_depno) ;
例三
例题: 收发室收文件。文件分类,每类中文件依收到 日期先后顺序编号。值班人员收到文件后,要 在系统中登录文件类别,编号,收到日期。 (注:一天中收到的文件可能不止一份) 编一PL/SQL 程序,查询每一类中最后一天收 到的文件) 表clog(kno 类别 , pno 编号 , pdate 收发日期) 练习要点: 光标FOR循环,带参数的光标
显式光标
定义 delcare cursor c1 is select … 打开 open c1 读 fetch c1 into 变量/记录 close c1
显式光标
读取状态信息 c1%found c1%rowcount
用光标定义记录 temp c1%rowtype
例二
问题:
为职工长工资。从最低工资长,工资总额限 制在50万元。 Declare cursor c1 is select eno,sal from emp order by sal for update ; emp_num number :=0 ; s_sal number ; e_sal number ; e_eno char(3);
相关文档
最新文档