informix-4gl常见错误
- 格式:doc
- 大小:46.00 KB
- 文档页数:5
-101 ISAM错误:文件未打开。
ISAM处理器被要求使用一个未打开的文件(表)。
对C-ISAM程序,程序试图在调用isopen打开文件前使用该文件,或是试图写一个只读方式打开的文件。
如果错误再次出现,请参考INFORMIX-Online的“管理员指南”附录B,“陷井错误”以得到进一步诊断。
有关诊断信息请与Informix技术支持部联系。
-102 ISAM错误: 不合法的ISAM函数参数。
一个传递给C-ISAM函数的参数值超出了可接受的范围。
对C-ISAM程序,检查这个函数调用中使用的参数,并与该函数的文档比较。
如果错误再次出现,请参考INFORMIX- Online的“管理员指南”附录B,“陷井错误”以得到进一步诊断。
有关诊断信息请与Informix技术支持部联系。
-103 ISAM错误: 不合法的键描述符(部分过多或是太长)。
ISAM处理器被给予了一个无效的键描述符。
对C-ISAM程序,检查键描述符。
每个键描述符最多可以有8个部分和120个字符。
如果错误再次出现,请参考INFORMIX-Online 的“管理员指南”附录B,“陷井错误”以得到进一步诊断。
有关诊断信息请与Informix技术支持部联系。
-104 ISAM错误: 打开文件过多。
ISAM处理器已经到达了打开文件数的极限。
对C-ISAM程序,检查并改变程序逻辑使得它同时打开较少的文件。
使用isclose来关闭不需要的文件。
对SQL产品,这个查询过于复杂;它同时使用了过多的表。
分步执行查询并使用临时表。
-105 ISAM错误: 坏的ISAM文件格式。
一个ISAM文件(表或索引)的内容已被损坏。
对C-ISAM,如果已使用了事务日志,你可以用isrecover程序来恢复该文件。
否则,重新建立或是从备份上恢复该文件。
对SQL 产品,使用bcheck或secheck实用工具来获取有关此问题的进一步信息,可能的话改正错误(在INFORMIX-OnLine数据库服务器中使用tbcheck或是在INFORMIX-OnLine动态服务器中使用oncheck)。
Informix - 4GL 初级进阶Informix - 4GL 初级进阶 (1)第一章INFORMIX-4GL基本组成 (1)第二章INFORMIX-4GL的处理逻辑 (3)第三章INFORMIX-4GL中的数据类型 (6)第四章定义程序变量 (11)第五章函数间传值 (14)第一章INFORMIX-4GL基本组成程序INFORMIX-4GL中的程序可以处理大量的应用需求,可以管理小型商业或主要银行的资金。
INFORMIX-4GL程序包括执行特定函数所需的所有部分。
程序:为解决一个问题或处理数据由计算机执行的操作逻辑顺序。
模块文件INFORMIX-4GL的一个构件是模块(module),模块是INFORMIX-4GL指令的机器文件,是整个程序的一部分。
把一组模块组合在一起,就成为整个程序,上图中有三个模块,合在一起就组成了客户程序。
在上图,跟踪记录客户的程序分成了三个模块,每个模块有其特殊的作用,cust_main.4gl 模块用于驱动和控制程序,cust_add.4gl模块用于管理新增客户记录,cust_edit.4gl模块包括改变或删除客户记录的INFORMIX-4GL代码。
模块包括一个或多个函数的集合。
函数(function)是INFORMIX-4GL代码最基本的单元,它是在被调用时执行的一组INFORMIX-4GL语句序列。
在INFORMIX-4GL程序中函数一次也没执行过也是有可能的,例如,如果从没删除过客户,那么函数delete_cust就不会被调用函数类型在INFORMIX-4GL中有四种函数,不同的函数名表示不同种类的INFORMIX-4GL语句功能。
GLOBALS:在这个函数只用于说明变量声明语句,它也让其它模块知道变量的存在,每个程序只允许有一个GLOBALS函数。
MAIN:给出INFORMIX-4GL开始的位置,INFORMIX-4GL首先总是先读MAIN函数,MAIN函数驱动程序的其余部分,因此,每个程序要有一个MAIN函数(否则INFORMIX-4GL不知从哪儿开始)执行。
-401 试图在 NULL 游标上进行Fetch。
这个 FETCH 语句传递一个无效的游标数据结构或一个 null 指针。
该游标可能已经用FREE语句释放,或者该游标数据结构可能在内存被覆盖。
5.0及以后版本的数据库服务器不返回这个错误代码。
参见错误-267 和 -404。
-402 主机变量的地址为 NULL。
检查程序构造 sqlda 和相关数据结构的方法,弄清它被设置为 null 指针的原因。
如果程序是用 INFORMIX-4GL 或其它语言编写的(在这种语言中,sqlda 不是由程序直接构造的),或者如果该语句只是通过名称来引用宿主变量,这个错误就不应当产生。
如果这个错误产生了,请注意所有的环境状况,并与 Informix 技术支持部门联系。
-403 接收行的大小与期望的大小矛盾。
这个内部错误说明在数据库服务器和调用它的函数库函数之间通讯有问题。
检查你的程序与使用的数据库服务器有相同的软件级。
如果该错误再出现,请记下全部细节并与 Informix 技术支持部联系。
-404 一个 NULL 控制块已经作为一个参数传递。
检查程序构造 sqlda 和相关的数据结构的方式;检查它是否以某种方法设置一个null 指针。
如果程序是用INFORMIX-4GL语言或在其内没有用程序直接构造 sqlda 的其它语言编写的,或者如果这个语句只用名字参考了主机变量,这个错误就不应该出现。
请与Informix 技术支持部联系。
在4.1版及更早版本的数据库服务器按所指明的意义上返回这个错误信息。
对于5.0版之后的数据库服务器版本,参见下一个条目。
-404 无游标或语句可供使用。
这个语句为一个游标命名,而此游标已与FREE语句同时发布。
重新检视此程序的逻辑,并检查在到达这个语句之前,所指定的游标是有所说明,打开的,但没有释放。
当使用5.0版本及其後版本时,这出错码的意义如上。
对於较老的数据库服务器,参见上一个说明。
-405 一个主机变量的地址不是严格地匹配的。
一个档(loc_loctype 包含LOCFILE,或在一个4GL程序,该变量已被定位在一个文
件)被定位时,这个错误表示系统提供的loc_write() 函数不能写到该档。
可能的
原因包括: 磁盘是满的,你没有对该磁盘的写许可;发生了一个硬件错误。
-456 指示器值不能适合宿主变数。
这个内部错误给出在数据库服务器和调用它的库函数之间通讯的问题。
检查你的程序与使用的数据库服务器在相同的软件级。
如果该错误再出现,请记下全部细节并与Informix 技术支持部联系。
-457 数据库服务器意外终止。
你的应用程序正在工作的数据库服务器进程或线索已经终止。
DBA 可能关闭该系统。
后面的大多数的可能原因是一个内部错误。
寻找操作系统信息可以得到更多的信息。
如果该错误再出现,请记下全部细节并与Informix 技术支持部联系。
检查伴随这个错误返回的ISAM 错误代码。
如果它是-129,数据库服务器没有终止,而只是达到当前用户会话数限制(看错误-129的解释)
-458 长事务失败。
数据库服务器(可能是OnLine 或INFORMIX-OnLine for NetWare) 用完记录这个事。
informix-4GL三運⽤資料庫1.指定⼀個欲使⽤的資料庫指定⼀個欲使⽤的資料庫的⽅法很簡單。
只要鍵⼊DATABASSE及資料庫名稱即可<語法> DATABASE 資料庫名稱2.⽤DEFINE命令定義程式變量<語法> DEFINE 變數串列資料型能[…]①變數串列,是⼀個或多個變數,以逗號分開。
②資料型能,是該變數串列的資料型能③DEFINE命令,須緊跟在GLOBAlS,MAIN,FUNCTION或REPORT四個關鍵字之後,或者,在END GLOBALS之後MAIN,FUNCTION,REPORT之前。
後者定義模組變量時。
④變量名稱,不得超過18個字元,但僅有前8個字元作為辨認之⽤不可重複。
同時⼤⼩寫視為相同。
⑤變量名稱,不得⽤保留字。
⑥城市變量名稱,與資料變量表格,或欄位,或資料庫名稱相同時,以程式變量名稱為準,欲使⽤后三者,須在其前加上⼀個@符號。
⑦程式變量的資料型能:注意:程式變數沒有SERIAL型能。
⑧LIKE關鍵字,讓你定義與資料庫欄位資料型能相同的程式變量名稱。
<語法>DEFINE變數名稱[,…] LIKE資料型能·欄位名稱eg: DEFINECUST_name CHAR(20),CUST_balance MONEYEg: DEFINECUST_lname LIKE customer.lname,c_order_date,c_ship_date DATE⑨程式變數,依他們被宣告(DEFINE)的位置,可分為整體變數(GLOBAL),模組變數(MODULE)與局部變數(LOCAL)三種。
⽽有效範圍也不同(1)整體變數(GLOBAL):通常被宣告在獨⽴的⼀個⽂字檔案(.4GL)中,⽽在各程式模組中以GLOBALS“整體變數檔名”的命令,它包進來。
如下⾯這個gl_data.4gl的內容:(與其他模組⼀樣須編譯接到主程式上)(2)模組變數(MODULE):宣告的位置,在每個程式檔案上。
第一章 Informix环境变量的设定一.环境范例:二.环境范例:.profile (环境变量的等号前后不得为空格)stty -istrip -isig (防止用户非法中断)INFORMIXDIR=/usr/informixINFORMIXSERVER=ld420501_tcpONCONFIG=onconfig.lifePATH=$PATH:$INFORMIXDIR/bin:$HOME/bin:$HOME/form:$HOME/prg DBPATH=/u/cbps/form:/u/cbps/binFORMDIR=/u/cbps/formDBDATE=Y4MD/LANG=english_us.8859DBLANG=english_us.8859DBNLS=2TERMCAP=/usr/informix/etc/termcapTERM=vt100export INFORMIXDIR INFORMIXSERVER ONCONFIG PATH DBPATH FORMDIR DBDATE LANGexport DBLANG DBNLS TERMCAP TERM环境变量的设置文件中还可加入其它Shell语句第二章 Informix产品线及DB应用开发工具简介一.Informix(英孚美)产品线简介(三大类):1.数据库服务器(Database Server):①.ODS (Informix-Online Dynemic Server)联机动态服务器,多线索,多性能的DB server(数据库服务器)②.XPS (Informix-Online Extended Parallel Server)将DSA扩展至松耦合或非共享的计算体系结构,动态可申缩性体系结构(Dynemic Scerable Architerta),适用于大型数据库的应用,并行SQL操作。
③.IUS (Informix-Universbl Server)处理丰富而复杂的数据而设计,并用Datablade模块技术,用来存储和检索丰富的多媒体Data及其他复杂的插入或对象扩展模块。
Informix-SPL(过程)语法详解Informix数据库用户一般都熟悉的使用SQL语句进行简单的查询和统计,而在Informix-Online的数据库服务器中提供了用结构化查询语言SQL语句和流程控制存储语言SPL创建存储例程,以减少Informix的处理。
存储例程是SQL语句和SPL的集合。
它们存放在数据库中,SQL语句会被分析.优化,在例程的执行中,高速缓存中会有一执行规划,使后续操作的执行速度很快。
而单独的SQL语句只有在执行时才会被优化,并且存储例程可以被不同的开发工具调用(4GL、ESQL/C、POWERBUILDER.DELPHI),在SELECT 语句中也调用过程。
例程调试简单,不必重新编译应有软件包。
在例程创建时Informix查询处理器会分析它,并产生一执行规划,永久存放于SPROCEDURES.SYSPROBODY.和SYSPROPLAN中,其后例程按此规划执行,由于大部分查询处理已经完成,存储例程可以在瞬间执行完毕。
由于存储例程所具有的优越性,它已成为进行Informix数据库核心开发的有力工具,掌握它对Informix的开发人员有积极意义,现将我在实际工作中使用的语法和例子详解于下,疏漏和错误请来信指教。
1.创建和执行例程①.创建例程语法:CRAETEPROCEDURE[OWNER.]PROCEDURE_NAME(参数1参数类型=[DEFAULT],参数2参数类型=[DEFAULT],参数n参数类型=[DEFAULT])RETURNING值1类型,值2类型,值n类型;<......>语句体;ENDRPOCEDURE例程大小不可超过64K,这包括所有的SQL.SPL.空格.跳格符,例程名最多18个字符,并在数据库中唯一存在,语句间用";"分隔,例程只能在当前数据库中创建,例程创建后是一标准执行模板块,可在不同的应有中对其调用,这对开发不同版本的应用将更为便利。
4GL语言开发原则及规范中科软件股份有限公司2002年04月27日目录1编码规范 (1)1.1命名规范 (1)1.1.1对象命名 (1)1.1.2常量和变量命名 (5)1.2注释规范 (7)1.2.1程序文件部分的注释 (8)1.2.2函数部分的注释 (9)1.2.3函数(过程)程序的增、删、改的注释说明约定 (11)1.2.4函数体内部的代码段修改注释 (12)1.2.5函数体内部的代码段说明约定 (13)1.3书写规范 (13)1.3.1基本原则 (13)1.3.2保留字引用规则 (14)1.3.3LET语句 (14)1.3.4IF语句 (15)1.3.5DEFINE语句 (15)1.3.6CALL语句 (16)1.3.7函数体内部组织 (16)1.4注意事项 (18)1编码规范1.1命名规范1.1.1对象命名1.1.1.1数据库命名规范●数据库名长度:不超过INFORMIX规定长度(十八位);●采用英文形式,规则如下:数据库名由两部分组成:系统名+DB;PrpInsDB系统名由英文单词构成,每个单词首字母大写,单词可采取缩写形式;●附表提供的词根表作为构词的唯一依据。
●本小节规范适用于各种语言版本的系统。
1.1.1.2数据库表命名规范●数据库表名长度:不超过INFORMIX规定长度(十八位);●采用英文和“_”组成形式,规则如下:数据库表名由三部分组成:系统名+业务类型+表的英文名(+“_”+子对象名),业务类型用1位大写字母表示,如承保业务为C、批改业务为P、理赔业务为L、收付费业务的数据表为J、通用代码为D;PrpCmain;货物运输保险保单信息表(继承了保单基本信息):PrpCmain_Cargo。
●业务类型采用附表提供的词根表中规定的字母;表名由英文单词构成,保险类别和业务类型的首字母大写,表的英文名采取小写形式,单词可采取缩写形式;●当一个对象继承主对象时,体现在数据表上则使用“_”分割;:货物运输保险保单信息表,继承了保单基本信息。
Informix-4gl编程过程中常见错误
Informix -244 错误:
Could not do a physical-order read to fetch next row.具体错误解释:
#finderr -244
原因:
a.锁表
b.记录太多
c.页损坏
d.某个进程死了以后资源未释放导致
在数据库端用 onstat –g ses/onstat –g sql /
Onstat –k 等找出锁表进程,用onmode –z结束该进程,不行,重启数据库释放。
锁方式:
行方式(row),页方式(默认page),表方式(table)。
解决:
1.降低锁级别
2.减少加锁事务的时间跨度
3.设置等待解琐时间
相关命令:
)检查索引及页损坏情况
#oncheck –cID database_name:table_name
) 查看锁级别
#oncheck –pt database_name:table_name
)设置锁级别(行方式)
#alter table table_name lock mode(row)
)设置隔离级别
#set isolation to dirty read
)设置等待解锁时间(不宜过大)
#set lock mode to wait second(秒)
不等待
#set lock mode to not wait
1:$ onstat -k | grep HDR+X
HDR+X 为排他锁
HDR 头
X 互斥
owner
是正持有锁的线程的共享内存地址
2:$ onstat -u |grep c60a363c
c60a363c 为1中查到的owner内容。
sessid
是会话标识符编号
3:$ onstat -g ses sessid
根据sessid得到进程pid
pid
与此会话的前端关联的进程标识
$ onstat -g sql sessid
通过上面命令查看执行的sql语句
4:$ ps -ef |grep pid
由此,我们可得到锁表的进程,可根据实际锁表进程的重要程度的具体情况采取相映处理方法:
对于重要且该进程可以自动重联数据库的进程,可以用onmode -z sesid 的方法杀掉锁表session,
$ onmode –z sessid
否则也可直接杀掉锁表的进程kill pid。
$ kill -9 pid
将表的页锁改为行锁
参考语句为
unload to optimize.sql delimiter "" select 'alter table
'||tabname||
' lock mode(row)'||';'from systables where locklevel=" P" and tabid > 99
将卸载的optimize.sql稍微删除一下其中出现的字符或乱码,后运行,即可把表的页锁改为行锁。