基于 C、JAVA 语法的 DMSQL 程序

在程序员们的印象中,过程化SQL语言是较复杂的,因为它有自己的语法规则,用户通常都不会去记那么多复杂的语法,只是在用的时候查看手册,所以当需要编写一个逻辑较复杂的DMSQL程序可能会碰到一些困难。

DM8实现了用C、JAVA语言语法作为DMSQL程序的可选语法,这就为那些了解C、JAVA语言的人提供了很大的方便性,无需查看手册就可以很自如的完成一个语句块,对SQL程序员而言,这个功能无疑是他们梦寐以求的。

7.1 C语法DMSQL程序

编写C语言语法的DMSQL程序,定义语句块时不需要用BEGIN及END把语句包含起来,而是直接用大括号括住即可。

下面给出两个C语法的DMSQL程序的例子来更具体地说明。

例1:

{

	int i = 0;

	VARCHAR v_name;

	VARCHAR v_email;

	for(i = 1; i < =7; i++)

	{

		SELECT NAME,EMAIL INTO v_name,v_email FROM PERSON.PERSON WHERE PERSONID=i;

		PRINT CONCAT(i,v_name); //使用数据库函数concat

		PRINT v_email;

	}

}

/

例2:

{

	try

	{

		SELECT 1/0;

	}

	catch(EXCEPTION EX)

	{

		THROW NEW EXCEPTION(-20002,'TEST');

	}

}

/

使用C语法的DMSQL程序时,可以很自由地调用一些系统内部函数(如上面例子中的concat())、存储函数、过程等等。可以定义像C##中的一些数据类型,如STRING类型,还可以定义C语言中的基本数据类型,如上面例子中的int,另外还支持全部的SQL类型,DM内部定义的类类型包括EXCEPTION类、数组类型、游标类型等。

在C语法DMSQL程序中使用游标时需要在OPEN、FETCH及CLOSE后使用“CURSOR”关键字,下面是一个使用C语法DMSQL程序操作游标的例子。

{

	VARCHAR v_name;

	VARCHAR v_phone;

	int i=0;

	CURSOR csr IS SELECT NAME,PHONE FROM PERSON.PERSON A,RESOURCES.EMPLOYEE B WHERE
A.PERSONID=B.PERSONID;

	string str;

	{

		OPEN CURSOR csr;

		if (csr%ISOPEN)

		{

			PRINT 'CURSOR IS ALREADY FIRST';

			while(i<=csr%ROWCOUNT)

			{

				FETCH CURSOR csr INTO v_name,v_phone;

				PRINT csr%ROWCOUNT; /* 从游标上取数据后,csr%ROWCOUNT属性加1 */

				PRINT CONCAT(v_name,v_phone);

				i++;

			}

			CLOSE CURSOR csr;

		}

		else

			PRINT 'CURSOR IS NOT OPENED';

		OPEN CURSOR csr; /* 再次打开,则会初始化各个属性 */

		if (csr%ISOPEN)

		{

			PRINT 'CURSOR IS OPENED AGAIN';

			PRINT csr%ROWCOUNT;

		}

		else

			PRINT 'CURSOR IS NOT OPENED';

	}

}

/

7.2 JAVA语法DMSQL程序

当使用JAVA语法编写DMSQL程序时,可以按JAVA语言风格定义一个类,之后在DMSQL程序中就可以以JAVA语言风格创建这个类对象并调用类的属性和方法。

下面是一个使用JAVA语法的DMSQL程序示例。

create or replace java public class Class1 {

	int b = 5;

	Class1 (int a)

	{

		this.b = a;

	}

	int testFun(int a)

	{

		b = a;

		return b;

	}

}

/

DECLARE

	c1 class1;

	c2 class1;

BEGIN

	c1 = new class1( );

	PRINT c1.b;

	PRINT c1.testFun(9);

	c2 = new class1(8);

	PRINT c2.testFun(c2.b);

END;

/

在JAVA语法DMSQL程序中使用游标时需要在OPEN、FETCH及CLOSE后使用“CURSOR”关键字。下面的例子演示了如何使用JAVA语法的DMSQL程序操纵游标。

create or replace java public class cls_java

{

	VARCHAR v_name;

	VARCHAR v_phone;

	int I=0;

	int fun1()

	{

		CURSOR csr FOR SELECT NAME,PHONE FROM PERSON.PERSON A,RESOURCES.EMPLOYEE B WHERE
A.PERSONID=B.PERSONID;

		OPEN CURSOR csr;

		while(i<=csr%ROWCOUNT)

		{

			FETCH CURSOR csr INTO v_name,v_phone;

			PRINT CONCAT(v_name,v_phone);

			i++;

		}

	CLOSE CURSOR csr;

	}

}

/

DECLARE

	c1 cls_java;

BEGIN

	c1 = new cls_java();

	c1.fun1();

END;

/
微信扫码
分享文档
扫一扫
联系客服