PHP编程入门的基本语法知识点总结
一、何为php
PHP,即“PHP: Hypertext Preprocessor”,是一种被广泛应用的开源通用脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中去。它的语法利用了 C、Java 和 Perl,易于学习。该语言的主要目标是允许 web 开发人员快速编写动态生成的 web 页面,但 PHP 的用途远不只于此。
简单来说,就是php是一种脚本语言,可以做很多事情。①服务器端脚本 ②命令行脚本 ③编写桌面程序
二、开始php
(1)下载php解释器,其实win下面,最简单的还是wamp这个软件,下载下来什么都有了...
(2)win下面貌似还需要,mscvr110.dll 这个链接库,vc2012运行库,安装即可
(3)ide,无耻的使用了 phpStorm,等哥有钱了一定给你补回来, so...
User: newasp
License:
===== LICENSE BEGIN =====
14617-12042010
00001xrVkhnPuM!Bd!vYtgydcusnqt
mM!hZWoGg"DprWxZCBwsy8T91O7MRu
NVHtrbzv8O9mmoLvtijcHSSE7i5Jr!
===== LICENSE END ====
三、入门引导
(1)简单的输出
<?php
/**
* Created by PhpStorm.
* User: LENOVO
* Date: 2014/9/28
* Time: 14:51
*/
// 输出PHP详细信息
echo phpinfo();
//C:\php-5.6.1-Win32-VC11-x86\php.exe D:\dizzy\php_test\index.php
//phpinfo()
//PHP Version => 5.6.1
//
//System => Windows NT LENOVO-PC 6.1 build 7600 (Windows 7 Ultimate Edition) i586
//Build Date => Sep 24 2014 18:54:12
//Compiler => MSVC11 (Visual C++ 2012)
//Architecture => x86
//Configure Command => cscript /nologo configure.js "--enable-snapshot-build" "--disable-isapi" "--enable-debug-pack" "--without-mssql" "--without-pdo-mssql" "--without-pi3web"
"--with-pdo-oci=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared"
"--with-oci8-12c=c:\php-sdk\oracle\x86\instantclient_12_1\sdk,shared" "--enable-object-out-dir=../obj/" "--enable-com-dotnet=shared" "--with-mcrypt=static" "--without-analyzer" "--with-pgo"
//Server API => Command Line Interface
(2)简单的表单处理
// 一个简单的html表单
<form action="action.php" method="post">
<p>姓名: <input type="text" name="name" /></p>
<p>年龄: <input type="text" name="age" /></p>
<p><input type="submit" /></p>
</form>
// action.php 接收表单数据, 使用超全局变量
%_POST["name"]
%_POST["age"]
<?php echo htmlspecialchars($_POST['name']); ?>
<?php echo (int)$_POST['age']; ?>
// 这便是最简单的表单提交,及数据接收
四、基本语法
(1)PHP标记
<?php
echo "Hello World!";
// 当文件为纯PHP时,最好在末尾删除PHP结束标记
//?>
(2)从HTML中分离
// 在一对开始和结束之外的内容,都会被PHP解释器忽略。也就是html标签和PHP代码混合的那种,跟jsp,asp一样...
<p>This is going to be ignored by PHP and displayed by the browser.</p>
<?php echo 'While this is going to be parsed.'; ?>
<p>This will also be ignored by PHP and displayed by the browser.</p>
// 使用条件,高级分离
<?php if ($expression == true): ?>
This will show if the expression is true.
<?php else: ?>
Otherwise this will show.
<?php endif; ?>
(3)指令分隔符,注释
PHP需要在每个语句后面用分隔符结束指令。
注释: // 或 /* ... */ 但是,*/ 会匹配最近的那个,切记!切记!
五、类型
PHP支持8种原始数据类型。
四种标量类型:boolean(布尔型),integer(整型),float(浮点型,double),string(字符串) 两种复合类型:array(数组),object(对象)
两种特殊类型:resource(资源),NULL(无类型)
<?php
$a_bool = TRUE; // a boolean
$a_str = "foo"; // a string
$a_str2 = 'foo'; // a string
$an_int = 12; // an integer
echo gettype($a_bool); // prints out: boolean
echo gettype($a _str); // prints out: string
// If this is an integer, increment it by four
if (is_int($an_int)) {
$an_int += 4;
}
// If $bool is a string, print it out
// (does not print out anything)
if (is_string($a_bool)) {
echo "String: $a_bool";
}
?>
(1)Boolean 布尔类型
可以为TRUE或FALSE,不区分大小写。
一般非0,即为TRUE。
(2)Integer 整型
整型可以使用十进制,十六进制,八进制或二进制表示。八进制前面必须加0(零),十六进制加0x,二进制加0b。
如果给定的一个数超出了interger的范围,将会被解释为float。同样运算结果超出integer范围,同样如此。
php没有整除运算符,1/2 将产生出 float 0.5。可以强制转换为integer 或使用round() 更好的四舍五入。
echo (int)2.9; // 输出 2
echo round(2.555, 2) // 输出 2.56
// 决不要将未知的分数强制转换为 integer,这样有时会导致不可预料的结果。
<?php
echo (int) ( (0.1+0.7) * 10 ); // 显示 7!
?>
(3)Float 浮点型(double)
浮点型,也叫浮点数float,双精度double, 实数real。
<?php
$a = 1.234;
$b = 1.2e3;
$c = 7E-10;
?>
(4)String 字符转
一个字符串string,就是由一系列的字符组成,其中每个字符等同于一个字节。这就意味着php只能支持256个字符集,因此不支持Unicode。
string最大可以达到2GB。
<?php
$a = 123;
echo '$a'; // 输出 $a
echo "$a"; // 输出 123, 转义字符 '\'
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
?>
(5)Array 数组
php中的数组,实际上是一个有序序列。映射是把values关联到keys的类型。 由于数组元素的值也可以说是另外的数组,树形结构和多维数组也是允许的。 <?php
$array = array(
"foo" => "bar",
"bar" => "foo",
);
// 自PHP 5.4 起
$array = [
"foo" => "bar",
"bar" => "foo",
]
// key 可以是 integer 或 string 类型
// key 值为可选项, 如果未指定,则使用之前用过最大的integer键名加上1作为新键名 ?>
// 要修改某个值,通过其键名给该单元赋一个新值。
// 要删除某个键值对,对其调用 unset() 函数。
使用 unset() 需要注意,此时数组不会重建索引。需要重建索引,可以使用 array_values() 函数。 数组计算总数: 使用 count() 函数
(6)Object 对象
<?php
class foo{
function do_foo(){
echo "Doing foo.";
}
}
// 用 new 实例化一个类
$f = new foo;
$f->do_foo;
(7)Resource 资源类型
资源 resource 是一种特殊的变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。
(8)NULL
特殊的NULL 表示一个变量没有值。NULL类型唯一可能的值就是NULL。
可被认定为NULL的变量:①被赋值为NULL ②尚未被赋值 ③被unset
(9)Callback 回调类型
自PHP5.4 起,可以使用 callable 类型 指定回调类型 callback。
六、变量
php中变量用一个美元符号 $ 后面跟变量名来表示的。区分大小写。 变量默认总是传值赋值。
<?php
$a = 1;
// 值传递赋值
$b = $a
// 引用赋值
$c = &$a
// global 关键字
global ; $GLOBALS
第二篇:Cobol基本语法总结
コボル基本語法
コボル基本語法
一、COBOL基本語法
compla項目使用的Cobol是Micro Focus 公司生产的Cobol,采用在HP-UNIX上运行。
一、cobol的书写格式(每行)
1、 前6列为序号区(一般不编辑)
2、 第7列为标示列,仅可以写如下几个标示符。
a. “*” 注释符(注释当前行的代码)
b “/“ 注释符(注释当前行的代码,程序编译时,强制程序清单另起一页,不建议使用)
c “-“ 字符串连接符
d “D” DEBUG行标示符(程序为DEBUG模式时,标有该标示符的语句行代码执行,否则和注
释行效果一样)
3、第8列---11列为A区,包括以下内容。
a 部、节名。
b 层号01
4、第12列---72列为B区,过程部的程序必须写在B区中。
5、第72以后部分不能编辑。
二、cobol的语法结构 (几大部分)
1、 标示部(IDENTIFICATION DIVISION):提供程序的一般性文档说明,本项目只保留程序名
(PROGRAM-ID)一项。
2、 环境部(ENVIRONMENT DIVISION): 提供程序外部有关的项目。
a. 配置节(CONFIGURATION SECTION)
①.指定源计算机(SOURCE-COMPUTE).
②.目标计算机(OBJECT-COMPUTE).
③.设置debug模式(SOURCE-COMPUTE H9000V WITH DEBUGGING MODE)
④. 指定读环境变量设置.
SPECIAL-NAMES.
ENVIRONMENT-VALUE IS CNS-ENV-PARM
ENVIRONMENT-NAME IS CNS-ENV-NAME.
b. 输入输出节(INPUT-OUTPUT SECTION).
文件的物理路径的定义。
方法一:(写死文件路径)
SELECT FILE-LOG ASSIGN
"/usr3/WSI/commonlog/WSI1101.log"
ORGANIZATION IS LINE SEQUENTIAL.
方法二:(过程部中动态指定文件)
SELECT FILE-LOG ASSIGN TO SELECT-FILE
ORGANIZATION IS LINE SEQUENTIAL.
在数据部定义字符串变量SELECT-FILE,在文件FILE-LOG打开前动态指定文件路径。 方法三:(环境变量中动态指定文件)
1
コボル基本語法
SELECT FILE-LOG ASSIGN TO EXTERNAL EXTFILELOG
ORGANIZATION IS LINE SEQUENTIAL.
在该程序运行前,设置环境变量:
setenv dd_ EXTFILELOG /usr3/WSI/nco035/lsc/tstlog/WSIXXXX.log
3、数据部(DATA DIVISION)。
程序中的变量都在数据部中定义,Cobol中没有全局变量和局部之分。(变量的类型结构参照5.变量类型)
a. 文件节(FILE SECTION)
给环境部定义的文件指定一个RECORD变量,读写文件用:
FD FILE-LOG.
01 RECORD-LOG PIC X(2000).
b. 工作存储节
定义程序中用到的临时变量。
a) COBOL变量定义需要加层号(表示层次关系),
· 层号从01开始
如: 01 I PIC X(10).
· 组合项
如: 01 WORK-AREA.
05 NUM-1 PIC 9(09).
05 STR-1 PIC X(10).
b) 层号依次排列顺序为:01 ,05,10,15,20,30 ·······
c. 连接节
子程序的参数的定义。
4、 过程部(PROCEDURE DIVISION)
程序的主体:程序的逻辑运算在此操作。
a、 每个程序分为四大节(模块),
· 前处理(初始化变量,设定初始值等)
· 主处理(程序业务处理部分)
· 后处理(程序正常结束时的出口)
· 错误处理(程序异常结束时的出口)
b、 对于子程序,PROCEDURE DIVISION 后应列出LINK节中定义的参数。
如: PROCEDURE DIVISION USING LINK-INPUT-DATA LINK-OUTPUT-DATA.
c、 程序结束。
· 主程序 STOP RUN.
· 子程序 GO BACK.
5、变量类型
COBOL程序的基本变量类型分为两大类字符串型(X)、数值型(9)。
a 字符串型
01 STRING-A PIC X(100).
100个字符长的变量,程序可以局部操作一个变量( STRING-A(start: length)如:
MOVE ALL “X” TO STRING-A(2:10)
2
コボル基本語法
(将变量STRING-A第2位开始10长度的内容全赋为”X”字符)
b 数值型
3
コボル基本語法
注: 1、对于出力型数值变量,可以用9代替Z,它们的区别是:
结果为零的整数部高位: Z型变量用空格显示,9型变量用零显示
2、COBOL语言中数值型变量种类很多,针对不同的要求有不同的数值类型。
c、在COBOL变量定义时,可以加入格式字符串字符。
d、不同类型变量间赋值。
整数
1、 字符串中数值部分可以作为对应长度的DISPLAY型变量给其它各种数值型变量。
2、 DISPLAY型变量(包括出力型变量)被赋值时,超出它表示范围的数可以被接受,但截去超出的高位。
3、 COMP型变量被赋值时,超出它表示范围的数不能被接受。
小数
1、 DISPLAY型变量(包括出力型变量)被赋值时,超出它表示范围的数可以被接受,但整数部截去超出的高位,
小数部截去低位。
4
コボル基本語法
2、 COMP型变量被赋值时,整数部超出它表示范围的数不能被接受,小数部超出它表示范围的数可以被接受,
但小数部截去低位
注: 以上所述赋值变量为任何类型的数值型变量(经过严格测试得出结论)。
e、字符型比较。
· 字符串比较时,系统自动截去尾部空格(如 “a “ = “a” )。
· 数字的数值形式和数字字符形式相等(如 “1234567890” = 1234567890)
· 综合以上两点, 有 “12 “ = 12
二、 基本语法:
1、赋值语句MOVE。
a、 将一个变量赋给另个变量
move a to b.
b、将一个变量同时赋给另外两个变量。
Move a to b c .
c、将一个变量全部赋为某个字符
move all “x” to a.
d、对于赋值溢出,截取的方式为.
· 字符型变量截去右边的溢出部分。
· 数值型变量截去整数部高位、小数部低位的溢出部分。
e、 组和项传送,它们的数据结构 必须相同
f、 对于组合项成员的局部引用,应该如下:
01 A-AREA.
05 STR-1 PIC X(10).
05 STR-2 PIC X(10).
01 B-AREA.
05 STR-1 PIC X(20).
05 STR-2 PIC X(10).
MOVE STR-1 OF A-AREA(1:4) TO STR-1 OF B-AREA(1:4).
2、显示语句DISPLAY
a. 向控制台打印显示的信息(如果程序基于opentp1环境,该信息将写到opentp1的log文件中).
DISPLAY “DISPLAY RESULT:” STR-1 “@@”.
b、输出一个环境变量名。
DISPLAY WK-ENV-NAME UPON CNS-ENV-NAME.
3、 接受语句ACCEPT
a、 接受从控制台上的输入值。
b、 接受环境变量值。
ACCEPT WK-ENV-PARM FROM CNS-ENV-PARM
ON EXCEPTION
·············
NOT ON EXCEPTION
·············
5
コボル基本語法
END-ACCEPT.
4、 四则运算
原则上,四则运算不用助记符语句,但对于简单运算( ++,--),可采用助记符语句。
a、 加法( ADD 1 TO NUM-1)
b、 减法(SUBTRACT 1 FROM NUM-1)
c、 其它所有运算均采用COMPUTE 语句
COMPUTE NUM-1 = NUM-2 + NUM3 * 10
运算符如下:
+ 加
- 减
* 乘
/ 除
** 指数
在COMPUTE语句中,变量和运算符间至少留有一个空格。
5、 重定义语句REDEFINES(数据部中使用)
01 A PIC X(10) VALUE SPACE.
01 B REDEFINES A PIC 9(10).
变量A,B使用同一个空间,重定义时,重定义变量必须紧跟着被重定义变量后面,并且在字符串同数值一起重定义时,如果对变量进行初始化,变量会初始化为空格。
6、 数组关键词OCCURS
OCCURS 整数 TIMES.
a.简单数组
01 A OCCURS 10 PIC X(30).
b. 组合项数组
01 A.
05 B OCCURS 10.
10 C PIC X(10).
10 D PIC X(20).
注意:引用数组中某一元素如下
DISPLAY C OF B(1) OF A.
7、 检查替换语句INSPECT.
INSPECT A TALLYING N FOR ALL ‘X’.
· 计算字符串A中含有‘X’字符的个数,结果赋给N.
INSPECT A REPLACING ALL ‘X’ BY ‘A’.
·将字符串A中所有的‘X’字符用‘A’代替.
8、 连结语句STRING
STRING A, B, C DELIMITED BY SIZE INTO D .
6
コボル基本語法
·将字符串A, B, C按它们定义长度连接赋给变量D. STRING A, B, C DELIMITED BY SPACE INTO D . ·将字符串A, B, C连接赋给变量D,去掉中间所有的空格. STRING “AAAAAAA”
DELIMITED BY SIZE
“BBBBBBB ” DELIMITED BY SIZE B
DELIMITED BY SIZE
INTO D .
·将字符串和字符串变量连接赋给变量D. 9、 IF语句
IF 语句包含以下三种: · IF ( 条件 )
THEN
语句 (无 “.”结束)
END-IF. · IF ( 条件 )
THEN
语句 (无 “.”结束)
ELSE
语句 (无 “.”结束) END-IF. · IF ( 条件 )
THEN
语句 (无 “.”结束)
ELSE
IF ( 条件 ) THEN
语句 (无 “.”结束) END-IF END-IF.
注: IF 语句最多只能使用三层嵌套,条件用括号括起来。 10 关系运算符
注:
7
コボル基本語法 判断字符串能否转换为数字。
A1 IS NUMERIC
A1 IS NOT NUMERIC
11、PERFORM 语句
PERFORM XXX-RTN.
· 调用子节,直到遇到第一个只包含EXIT语句的段中止,回到该调用语句的下一条语句。 EXIT只与它搭配有效。
所以节的定义规定如下:
XXX-RTN SECTION.
语句块 ········
XXX-EXT.
EXIT.
PERFORM XXX-RTN N TIMES.
· 循环调用子节N次
PERFORM XXX-RTN UNTIL N> 30.
· 循环调用子节,直到N 大于30。
PERFORM UNTIL 表达式
语句 ·······
END-PERFORM.
· 循环调用语句块,表达式判断在语句块前进行。
PERFORM VARYING X FROM A BY B UNTIL X > 12 语句 ·······
END-PERFORM.
· 循环调用语句块,相当于FOR 循环。
12、EVALUATE 语句
EVALUATE 变量、常量、表达式
WHEN ANY
TRUE
FALSE
(NOT) 常量1 THRU (THROUGH) 常量2
WHEN OTHER .
END – EVALUATE
· ANY :任何变量、常量值
· TRUE、FALSE :关系表达式的结果
· (NOT) 常量1 THRU (THROUGH) 常量2: 值(不)在常量1和常量2 构成的闭区间 · 另外,在WHEN 后面可以包含简单的关系表达式。
如:
EVALUATE A
WHEN => 10
8
コボル基本語法 EVALUATE B
WHEN = 1 OR = 2 OR = 3
语句 ····
WHEN OTHER
语句 ····
END-EVALUATE
WHEN OTHER
语句 ····
END-EVALUATE.
13、另外,不同的COBOL系统提供了不同内部函数,建议少用内部函数,以下提供几个通用的内部函数 · ORD 取得字符的ASICII码 如:
MOVE FUNCTION ORD (“A”) TO NUMBER.
? UPPER-CASE 字母小写转换成大写 如:
MOVE FUNCTION UPPER-CASE (STRING(START:1)) TO STRING(START:1) · LOWER -CASE 字母小写转换成大写 如:
MOVE FUNCTION LOWER-CASE (STRING(START:1)) TO STRING(START:1) · REVERSE 对字符串中所有字符进行倒序 如:
MOVE FUNCTION REVERSE(STRING-1) TO STRING
· LENGTH 取得变量的定义长度,如:
COMPUTE LEN = FUNCTION LENGTH(STRING)
9
コボル基本語法
二、PRO*COBOL基本語法
COMPLA使用的PRO*COBOL是ORACLE公司提供的在COBOL程序中嵌入SQL语句的一种方法,使得程序方便地访问操作ORACLE数据库;PRO*COBOL程序经过ORACLE提供的预编译器预编译生成中间COBOL程序后,程序中所有的SQL语句直接调用ORACLE库函数,再经过COBOL编译器同一般COBOL程序一样编译生成各种可执行模块,由于程序中直接调用ORACLE库函数,所以它们访问操作ORACLE数据库的速度很快,基本语法如下。
一、特点。
· 所有的SQL或数据库操作相关语句均被括在” EXEC SQL” 和 “END-EXEC”之间,并且它们只能包含一条语
句,如:
EXEC SQL
SQL语句
END-EXEC.
· 所有访问操作数据库的变量都必须是主变量。
· “EXEC SQL” ,”END-EXEC’及其包含的语句都必须从12列或12列以后开始。
三、 数据部内容。
· 引用两个对象SQLCA, ORACA.
EXEC SQL INCLUDE SQLCA END-EXEC.
EXEC SQL INCLUDE ORACA END-EXEC.
· 主变量定义。
EXEC SQL BEGIN DECLARE SECTION END-EXEC. (主变量定义开始)
EXEC SQL END DECLARE SECTION END-EXEC.(主变量定义结束)
·· 主变量都必须定义在这里,具体定义和一般的COBOL变量一样。
·· VARCHAR型变量(可变长度).
该变量定义就是在X型变量后加关键字VARYING.如:
05 STRING PIC X(100) VARYING.
它实际包含两部分(预编译后的中间COBOL程序可见)
05 STRING.
06 STRING-LEN PIC S9(4) COMP.
06 STRING-ARR PIC X(100).
STRING-LEN 表示字符串的实际长度,STRING-ARR 表示字符串的实际内容。
SQL语句中,只能用STRING.
从表中得到值时,STRING-LEN 自动被赋值。
向表中写入值时,STRING-LEN 需要手工指定长度,SQL将STRING(1:STRING-LEN)部分有效字符串写到表中。 定义主变量时,引用COPY句: EXEC SQL INCLUDE WSIT1101.cpy END-EXEC.
· 游标的定义可以放在数据中。
四、 数据部中SQL语句的基本语法
1)、错误扑获
ORACLE错误扑获是一个全局性的标志,在一个事务(在PRO*COBOL中,ORACLE事务以COMMIT或ROLLBACK为分割点)中,后一个错误扑获会覆盖前一个错误扑获设置。
· 遇到SQL警告(SQLCODE > 0 )继续
EXEC SQL WHENEVER SQLWARNING CONTINUE END-EXEC.
10
コボル基本語法
· 遇到SQL错误(SQLCODE < 0 )继续
EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
· 遇到SQL错误(SQLCODE < 0 )跳转
EXEC SQL WHENEVER SQLERROR GOTO ORA-ERROR END-EXEC.
2)、 数据连接
数据库连接在一般的项目开发中用不到,只用于测试程序ドラバ中(不连接外部数据库)
· 方式一(USERNAME 和PASSWORD分开,如:USERNAME = “OPS$LAPROC51” PASSWORD = “LAPROC”)
EXEC SQL
CONNECT :USERNAME IDENTIFIED BY :PASSWD
END-EXEC.
· 方式二(USERNAME 和PASSWORD合并,如:UID = “OPS$LAPROC51/LAPROC”)
EXEC SQL
CONNECT :UID
END-EXEC.
3)、 静态SQL语句
· 单条记录的检索
EXEC SQL
SELECT ENAME,
SAL,
COMM
INTO :HST-EMP-NAME,
:HST-SALARY,
:HST-COMMISSION:HST-COMM-IND
FROM EMP
WHERE EMPNO = :HST-EMP-NUMBER
END-EXEC.
注: 上例中的COMM-IND为指示变量,在检索操作中每个接受主变量都可指定一个指示变量(9(04) COMP型),它
用来判断主变量是不是接受到一个空值(NULL)(主变量不能接受空值),当指示变量为-1时,表示对应的主变量应该接受到一个空值(主变量自己表示不出来)
· 多条记录的检索(CURSOR 游标)
·· 游标的定义
EXEC SQL
DECLARE CUR_NAME CURSOR FOR
SELECT MSG_CD ,
MSG_1,
MSG_2
FROM WWWTMSG1
END-EXEC.
游标的定义:将SQL查询语句声明为一个游标,不调用ORACLE库函数,不会更新SQLCODE的值。
·· 游标的打开
11
コボル基本語法
EXEC SQL
OPEN CUR_NAME
END-EXEC.
游标的打开:用游标定义的SQL语句检索数据库,将检索结果生成一个游标对象,(此时游标指针在第一条
记录前一位置,无法确定游标中有没有记录)。
·· 游标中记录的抽取
EXEC SQL
FETCH CUR_NAME
INTO : HST-MSG-CD ,
: HST-MSG-1,
: HST-MSG-2
END-EXEC.
游标中记录的抽取:将游标中的记录抽取到相应的主变量中,一次抽取一条。
·· 游标的关闭
EXEC SQL
CLOSE CUR_NAME
END-EXEC.
游标的关闭: 将现有的游标对象释放,游标再次打开前,必须关闭。
· 更新
EXEC SQL
UPDATE WWWTMSG1
SET MSG_1 = : HST-MSG-1,
MSG_2 = : HST-MSG-2
WHERE MSG_CD = : HST-MSG-CD
END-EXEC.
· 删除
EXEC SQL
DELETE FROM WWWTMSG1
WHERE MSG_CD = : HST-MSG-CD
END-EXEC
· 插入
EXEC SQL
INSERT
INTO WWWTMSG1(MSG_CD,
MSG_1,
MSG_2)
VALUES (:HST-MSG-CD,
:HST-MSG-1,
:HST-MSG-2)
END-EXEC
12
コボル基本語法 · 事务的提交
·· 方式一(释放连接)
EXEC SQL COMMIT WORK RELEASE END-EXEC.
·· 方式二(不释放连接)
EXEC SQL COMMIT WORK END-EXEC.
· 事务的回滚
·· 方式一(释放连接)
EXEC SQL ROLLBACK WORK RELEASE END-EXEC.
·· 方式二(不释放连接)
EXEC SQL ROLLBACK WORK END-EXEC.
· 典型的SQLCODE值
·· SELECT
1403 : 没有检索到记录
·· FETCH(游标中记录的抽取)
1403 : 游标指针FETCH到游标的尾部
·· UPDATE
1403 : 没有更新的记录
-60 : 死锁
-2049: 由于死锁导致系统超时
·· DELETE
1403 : 没有删除的记录
-60 : 死锁
-2049: 由于死锁导致系统超时
·· INSERT
-1 : 插入的记录已存在
-60 : 死锁
-2049: 由于死锁导致系统超时
· 典型ORACLE内部变量
SQLCODE : SQL语句运行后得到的返回值
SQLERRMC: SQL语句运行后得到的返回信息
SQLERRD(3): SQL语句运行处理的记录条数
4)、动态SQL语句
· 动态一(直接执行SQL字符串)
·· 方式一
MOVE "INSERT INTO DYN1 VALUES ('TEST')" TO DYNSTMT.
EXEC SQL EXECUTE IMMEDIATE :DYNSTMT END-EXEC.
·· 方式二
EXEC SQL EXECUTE IMMEDIATE
"INSERT INTO DYN1 VALUES ('TEST')"
13
コボル基本語法
END-EXEC.
动态一:只用于没有任何参数和返回结果的SQL语句操作
· 动态二(用于非检索SQL语句)
·· 方式一(带参数)
MOVE "INSERT INTO EMP (EMPNO, DEPTNO) VALUES (:V1, :V2)"
TO DYNSTMT-ARR.
EXEC SQL PREPARE S FROM :DYNSTMT END-EXEC.
EXEC SQL EXECUTE S USING :EMPNO, :DEPTNO1 END-EXEC.
其中V1,V2为形参,S为PREPARE生成的临时对象
·· 方式二(不带参数)
STRING "INSERT INTO " DELIMITED BY SIZE
"EMP (EMPNO, " DELIMITED BY SIZE
"DEPTNO) " DELIMITED BY SIZE
"VALUES ( '" DELIMITED BY SIZE
EMPNO DELIMITED BY SIZE
"' , '" DELIMITED BY SIZE
DEPTNO1 DELIMITED BY SIZE
"' ) " DELIMITED BY SIZE
INTO DYNSTMT.
EXEC SQL PREPARE S FROM :DYNSTMT END-EXEC.
EXEC SQL EXECUTE S END-EXEC.
· 动态三(用于检索SQL语句)
·· 方式一(带参数)
MOVE "SELECT ENAME FROM EMP WHERE DEPTNO = :V1"
TO DYNSTMT.
EXEC SQL PREPARE S FROM :DYNSTMT END-EXEC.
EXEC SQL DECLARE C CURSOR FOR S END-EXEC.
EXEC SQL OPEN C USING :DEPTNO END-EXEC.
EXEC SQL FETCH C INTO :ENAME END-EXEC.
EXEC SQL CLOSE C END-EXEC.
·· 方式二(不带参数)
STRING "SELECT ENAME FROM " DELIMITED BY SIZE
"EMP WHERE DEPTNO = '" DELIMITED BY SIZE
DEPTNO DELIMITED BY SIZE
"' " DELIMITED BY SIZE
INTO DYNSTMT.
EXEC SQL DECLARE C CURSOR FOR S END-EXEC.
EXEC SQL OPEN C END-EXEC.
EXEC SQL FETCH C INTO :ENAME END-EXEC.
EXEC SQL CLOSE C END-EXEC.
14
コボル基本語法 所有的检索SQL语句都必须采用游标方式。
三、开发环境
一、概要
Compla项目的开发环境
· 以HP UNIX B.11.11 为操作系统
· 以 OPENTP1 SERVER(日立制品)为APPLICATION SERVER,COMPLA所有的程序都基于
OPENTP1.
· 以MQ SERVER(INFOR STAR MQ ,IBM MQ的改造品)完成异步通信方式。
· 以 ORACLE SERVER 为数据库系统
二、通信处理方式
Compla项目采用两种处理方式RPC(同步),MQ(异步).
· MQ(Message Queue)方式
15
コボル基本語法
MQ 發信MQ受信處理示意圖
如上图所示,AP制御以SUP的方式常驻于OPENTP1下,监视受信MQ SERVER,受信MQ SERVER中一有MQ数据,AP制御就取出来,传给DB同期更新程序进行处理,更新关联
DB,发信方和受信方以受信MQ SERVER隔离,互相不影响,完成异步处理,在项目开发中,主要开发DB同期更新,不涉及具体环境。
· RPC (Remote Process Call )方式
RPC方式为OPENTP1 SERVER 提供的进程间访问方式,由SUP( Service Use Process) 和 SPP ( Service Provide Process)组成。Compla项目就是制作若干SPP,常驻于OPENTP1中,供其它系统调用。如下具体介绍SUP 和 SPP的基本结构和基本函数.
·· SUP (服务使用者)
··· RPC OPEN (アプリケーションプログラムの開始)
01 RPC-OP-ARG.
02 REQEST PIC X(8) VALUE 'OPEN '.
02 STATUS-CODE PIC X(5) VALUE SPACE.
02 FILLER PIC X(3).
02 FLAGS PIC S9(9) COMP VALUE ZERO.
CALL 'CBLDCRPC' USING RPC-OP-ARG.
进入OPENTP1 环境
··· RPC ADM(ユーザサーバの開始処理完了の報告)
01 ADM-ARG.
16
コボル基本語法
02 REQUEST PIC X(8) VALUE 'COMPLETE'.
02 STATUS-CODE PIC X(5) VALUE SPACE.
02 FILLER PIC X(3).
02 FLAGS PIC S9(9) COMP VALUE ZERO.
02 FILLER PIC X(3).
CALL 'CBLDCADM' USING ADM-ARG.
如果SUP常驻OPENTP1下,该函数向OPENTP1报告注册信息。(不常驻OPENTP1下的SUP程序不调用该函数)
··· RPC CALL (遠隔サービスの要求)
01 RPC-CALL-ARG1. (CALL-MAIN)
02 REQEST PIC X(8) VALUE 'CALL '.
02 STATUS-CODE PIC X(5) VALUE SPACE.
02 FILLER PIC X(3).
02 FLAGS PIC S9(9) COMP VALUE ZERO.
02 DESCRIPTOR PIC S9(9) COMP VALUE ZERO.
02 S-NAME PIC X(32) VALUE SPACE.
02 G-NAME PIC X(32) VALUE 'WSISPPSV'.
01 RPC-CALL-ARG2. (INPUT-DATA)
02 INDATA-LENG PIC S9(9) COMP VALUE ZERO
02 INDATA PIC X(40) VALUE SPACE.
01 RPC-CALL-ARG3. (OUTPUT-DATA)
02 OUTDATA-LENG PIC S9(9) COMP VALUE ZERO
02 OUTDATA PIC X(40) VALUE SPACE..
CALL 'CBLDCRPC' USING RPC-CALL-ARG1 RPC-CALL-ARG2 RPC-CALL-ARG3.
调用OPENTP1下注册的指定组(G-NAME)内的指定服务(S-NAME)。注意在SUP程序中调用前必须指定入力デー
タ的长度(INDATA-LENG)和出力データ的长度(OUTDATA-LENG)
··· RPC CLOSE
01 RPC-CL-ARG.
02 REQEST PIC X(8) VALUE 'CLOSE '.
02 STATUS-CODE PIC X(5) VALUE SPACE.
02 FILLER PIC X(3).
02 FLAGS PIC S9(9) COMP VALUE ZERO.
CALL 'CBLDCRPC' USING RPC-CL-ARG
退出OPENTP1环境
·· SPP (服务提供者)
17
コボル基本語法
如图所示,一个SPP Module 由 一个SPP MAIN ,多个SPP SERVICE ,一个SPP SERVICE DEFINE 三部分组成。一个SPP Module 在OPENTP1下以一个组的方式注册。
··· SPP MAIN
RPC OPEN (アプリケーションプログラムの開始)
01 RPC-OP-ARG.
02 REQEST PIC X(8) VALUE 'OPEN '.
02 STATUS-CODE PIC X(5) VALUE SPACE.
02 FILLER PIC X(3).
02 FLAGS PIC S9(9) COMP VALUE ZERO.
CALL 'CBLDCRPC' USING RPC-OP-ARG.
进入OPENTP1环境
RPC MAINLOOP (SPPのサービス開始)
01 RSV-ARG.
02 REQUEST PIC X(8) VALUE 'MAINLOOP'.
02 STATUS-CODE PIC X(5) VALUE SPACE.
02 FILLER PIC X(3).
02 FLAGS PIC S9(9) COMP VALUE ZERO.
CALL 'CBLDCADM' USING ADM-ARG.
该SPP MODULE 中所有的SPP SERVICE 都完成初始化(完成数据部前的运行),进入监视状态。
RPC CLOSE
01 RPC-CL-ARG.
02 REQEST PIC X(8) VALUE 'CLOSE '.
02 STATUS-CODE PIC X(5) VALUE SPACE.
02 FILLER PIC X(3).
02 FLAGS PIC S9(9) COMP VALUE ZERO.
CALL 'CBLDCRPC' USING RPC-CL-ARG
18
コボル基本語法 退出OPENTP1环境
SPP MAIN 只调用相关的OPENTP1或其它库函数,创建RPC环境,和SPP SERVICE 及其其它应用程序不存在任何调用关系。
··· SPP SERVICE
SPP SERVICE 和一般子程序基本上一样,主要区别在于SPP SERVICE 的接口形式固定。
入力データ
INPUT-DATA
INPUT-DATA-LENGTH
出力データ
OUTPUT-DATA
OUTPUT-DATA-LENGTH
(データ、データ长度的位置关系和SUP中RPC CALL的データ、データ长度的位置关系不同)
··· SPP SERVICE DEFINE
该文件只包含如下一行内容。
entry “SPP SEVICE NAME ”;
·· 另外将SUP或SPP常驻OPENTP1下还需以下内容
··· ユーザーサービス定義ファイル(文件名不带任何后缀,并且不超过8个字母)
SPP ユーザーサービス定義ファイル
set module = "SPPMD"
set service_group = "SPPGP"
set service = "SPPSV1=SPPSV1P","SPPSV2=SPPSV2P" ·····
其中SPPSV1 ,SPPSV2 为向OPENTP1注册的SERVICE名,SPPSV1P ,SPPSV2P为对应SPP SERVICE 程序的
PROGRAM-ID.
SUPユーザーサービス定義ファイル
set module = "SUPMD"
以上是两种ユーザーサービス定義ファイル的基本内容,实际项目中还包含许多环境设置。
··· 相关命令
# 将编译生成的 MODULE拷贝到/opt/betran50/aplib/ 或 /opt/debug/WSI/exe/中。
# 将编辑好的ユーザーサービス定義ファイル以betran50用户置于/opt/betran50/conf内
# 可以使用以下命令启动,停止等服务。
## dcsvstart -u ユーザーサービス定義名 启动指定服务
## dcsvstop ユーザーサービス定義名 停止指定服务
## dcsvstop -f ユーザーサービス定義名 强制停止指定服务
## prcls 当前启动中的所有服务列表
## tail -f /tmp2/betran50.log 跟踪OPENTP1的LOG文件
19