当前位置: 代码迷 >> PB >> pb的select语句表名怎么使用变量
  详细解决方案

pb的select语句表名怎么使用变量

热度:142   发布时间:2016-04-29 05:24:59.0
pb的select语句表名如何使用变量?
例如:select * from tablename;
tablename想使用变量而非真正的表名

我使用select * from :变量名
提示错误。
------解决思路----------------------
10.2.3 类型三
这种类型的动态SQL语句的使用频率可能是仅次于第一种类型,它常用来处理参数个数和结果集在编译时已知的情况,又分为游标和存储过程两种情况。使用游标形式的语法与程序中出现的次序为:
DECLARE Cursor DYNAMIC CURSOR FOR DynamicStagingArea ;
PREPARE DynamicStagingArea FROM SQLStatement{USING TransactionObject} ;
OPEN DYNAMIC Cursor{USING ParameterList} ;
FETCH Cursor 
------解决思路----------------------
INTO HostVariableList} ;
CLOSE Cursor;
使用存储过程的第三类动态SQL语句的格式和次序与上面的语法形式类似,只是使用EXECUTE语句来代替上面的OPEN语句,其语法格式为:
DECLARE  Procedure DYNAMIC  PROCEDUREFOR DynamicStagingArea ;
PREPARE DynamicStagingArea FROM SQLStatement
{USING TransactionObject} ;
EXECUTE DYNAMIC Procedure{USING ParameterList} ;
FETCH ProcedureINTO HostVariableList} ;
CLOSE Procedure ;
其中,Cursor和Procedure分别是游标名和过程名;DynamicStagingArea是动态策略区变量,通常使用系统预定义的全局变量SQLSA;SQLStatement是个字符串(常量或变量均可,变量时变量名前面加上冒号(:)),其内容是有效的SQL语句,并使用问号代表参数;ParameterList是对应于SQLStatement中问号的参数列表;HostVariableList是PowerScript主变量(即在其前面加上冒号的PowerScript变量);TransactionObject是事务对象名,缺省时使用SQLCA。
DECLARE语句说明动态游标或动态过程,PREPARE语句准备动态策略区,OPEN或EXECUTE语句打开动态游标或执行动态过程,FETCH语句读取一行数据,如果需要读取多行数据,那么需要反复执行FETCH语句。最后,CLOSE语句关闭动态游标或动态过程。FETCH语句和CLOSE语句的用法与上节介绍的方法相同。下面是第三类动态SQL语句的一个应用示例,它得到籍贯是“北京”的雇员:
DECLARE my_cursor DYNAMIC CURSOR FOR SQLSA;
Int Emp_id_var
String SQLstatement,Emp_state_var = "北京"
SQLstatament = "SELECT emp_id FROM employee  WHERE emp_state = ?"
PREPARE SQLSA FROM :SQLstatement;
OPEN DYNAMIC my_cursor using :Emp_state_var;
FETCH my_cursor INTO :Emp_id_var;
CLOSE my_cursor;
该示例中省略了必要的SQL语句执行状态检查工作,在实际编写程序时,除DECLARE语句外,执行了其他SQL语句后,都应该检查事务对象的SQLCode属性,以判断SQL语句的执行是否成功。
使用这种类型的动态SQL语句可以创建比较通用的向列表框或者下拉列表框中添加数据的脚本。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//函数名称wf_AddItem(dropdownlistbox fo_obj,string fs_SQL)
//参数:fo_obj为下拉列表框,fs_SQL为SQL语句
//返回值:无
//功能:使用参数指定的SQL语句向指定的下拉列表框中添加数据
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
String ls_item
 
Declare item_cur Dynamic Cursor For SQLSA;        //定义动态光标
Prepare SQLSA From :fs_SQL Using SQLCA;
Open Dynamic item_cur;               //打开动态光标
Fetch item_cur InTo :ls_item;                  //取数据
 
fo_obj.SetRedraw(False)                //禁止下拉列表框刷新
 
Do While SQLCA.SQLcode = 0
                  fo_obj.AddItem(ls_item)                //向下拉列表框中添加项目
         Fetch item_cur inTo :ls_item;
Loop
 
fo_obj.SetRedraw(True)                 //刷新下拉列表框
 
Close item_cur;            //关闭动态光标
------解决思路----------------------
引用:
需要用到动态sql


动态sql的四种用法之三
  相关解决方案