请问Dynamic中的第四种格式(方法)怎么用

德傲道 2005-05-10 06:01:34
请问Dynamic中的第四种格式(方法)怎么用?尤其是其中对过程的使用?最好能给个实例^_^
...全文
101 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
德傲道 2005-05-11
  • 打赏
  • 举报
回复
哈,先谢谢cuixuf(A4〓小小小小刀〓(...---...)) 啦,不过可能是我没有说清楚,我要用的格式确实是你说的这种格式,pb帮助中也是这么说的,但是,pb帮助中和你所说的内容中,没有一个动态执行过程的例子,你们所说的都是sql查询语句,不是么?
吹雪风 2005-05-10
  • 打赏
  • 举报
回复
原文CSDN上也有:
http://search.csdn.net/Expert/topic/216/216844.xml?temp=.7718317
吹雪风 2005-05-10
  • 打赏
  • 举报
回复
五、动态SQL 格式四

这是一种全动态的SQL 语句。全动态的SQL 语句是指这样的语句:在写程序时并不知道SELECT语句的选择项是什么或有多少个,也不知道SQL语句中包含了多少个变量,它们是变化的。全动态SQL支持临时生成的SQL。全动态SQL实现起来很复杂,也很有用,下面我们将详细讲述。语法如下:

DECLARE Cursor | Procedure

DYNAMIC CURSOR | PROCEDURE FOR DynamicStagingArea;

PREPARE DynamicStagingArea FROM SQLStatement

{ USING TransactionObject };

DESCRIBE DynamicStagingArea INTO DynamicDescriptionArea;

OPEN DYNAMIC Cursor | Procedure

USING DESCRIPTION DynamicDescriptionArea;

EXECUTE DYNAMIC Cursor | Procedure

USING DESCRIPTION DynamicDescriptionArea;

FETCH Cursor | Procedure USING DESCRIPTION DynamicDescriptionArea;

CLOSE Cursor | Procedure ;

其中,Cursor或Procedure 是要使用的游标或过程名;DynamicStagingArea是DynamicStagingArea变量名(一般为SQLSA);SQLStatement 是包含合法SQL语句的字符串,它可以是字符串常量或前面带有冒号的PowerBuilder字符串变量,它必须包含在一行且不能包括表达式;TransactionObject是指向数据库的事物对象名。DynamicDescriptionArea 是DynamicDescriptionArea 变量名(一般为SQLDA)。

可以用以下方法设置在PREPARE语句中出现的每个输入参数的类型和值。PowerBuilder在 DESCRIBE运行时可取得SQLDA的属性NumInputs(可得到输入参数个数)和InParmType(可得到输入参数类型),可用这些值和函数SetDynamicParm给输入参数的类型和值赋值。输入参数是任选的,若要使用它们,应在运行OPEN或EXECUTE语句之前给它们赋值。

可以用以下方法取得PREPARE语句中的每个输出参数的类型和值。如果使用的数据库支持输出参数描述,PowerBuilder应用可在DESCRIBE语句执行时取得SQLDA的NumOutputs值;若数据库不支持输出参数描述,PowerBuilder应用可在FETCH语句执行时取得SQLDA的NumOutputs值。可用输出参数的号码(NumOutputs)从输出参数类型(OutParmType)数组中获得特定参数的类型。得到类型后,在FETCH语句后可调用恰当的函数取出输出值。

下面是一个使用动态SQL格式四的例子,此例有一个字符串输入参数,但输出参数的类型和个数不定。

string ls_sql,ls_val

integer i,li_boolean

ls_sql="SELECT * FROM auths WHERE auths_id=?"

DECLARE c1 DYNAMIC CURSOR FOR SQLSA;

PREPARE SQLSA FROM :ls_sql;

DESCRIBE SQLSA INTO SQLDA;

//若DESCRIBE成功,则输入描述符数组将包含一个输入描述符,

//在打开游标前必须先给输入描述符赋值。

SetDynamicParm(SQLDA,1,’A00001’) //这里的“1”表示第一个参数

OPEN DYNAMIC c1 USING DESCRIPTOR SQLDA;

lable:

FETCH c1 USING DESCRIPTOR SQLDA;

IF SQLCA.SQLCODE=0 THEN //若FETCH成功

FOR i=1 to SQLDA.NumOutputs

//SQLDA.NumOutputs含有输出参数的个数

CHOOSE CASE SQLDA.OutParmType[i]

CASE TypeString!

ls_val=GetDynamicString(SQLDA,i)

CASE TypeDate!

ls_val=string(GetDynamicDate(SQLDA,i),’dd mm yyyy’)

CASE TypeTime!

ls_val=string(GetDynamicTime(SQLDA,i),’hh:mm:ss’)

CASE TypeDataTime!

ls_val=string(GetDynamicDateTime(SQLDA,i),&

’dd mm yyyy hh:mm:ss’)

CASE TypeInteger!,TypeLong!,TypeDecimal!,TypeDouble!,TypeReal!

ls_val=string(GetDynamicNumber(SQLDA,i))

CASE TypeBoolean!

li_boolean=GetDynamicNumber(SQLDA,i)

IF li_boolean=1 THEN

ls_val="TRUE"

ELSE

ls_val="FALSE"

END IF

END CHOOSE

…… //进行相应处理

NEXT

GOTO lable //取下一条记录

ENF IF

CLOSE c1;

格式四适合于所有子句都不确定的SELECT语句,这是最有用的一种动态SQL。

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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