pb的select语句表名如何使用变量?

时间:2022-09-03 15:06:24
例如:select * from tablename;
tablename想使用变量而非真正的表名

我使用select * from :变量名
提示错误。

9 个解决方案

#1


你这样做的目的是什么?  

#2


要通过 存储过程 动态生成数据窗口才能用动态表名,或通过完整的select语句动态生成数据窗口,生成数据窗口要有具体的字段属性,长度,表名都不清楚是不行的

#3


不需要生成数据窗口,我是要通过输入变量取得不同的表名
我想通过
select filed1 into :i from 变量表名 取得i的值 ,我的表名虽然不同,但结构是一样的。
只是为了取得一个字段的值而已。
在程序是通过变量取得表名,就不需要作不同的判断了。

#4


在pb程序中的script 中使用。

#5


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;            //关闭动态光标

#6


需要用到动态sql

#7


引用 6 楼 lzp_lrp 的回复:
需要用到动态sql


动态sql的四种用法之三

#8


没用过,表名前加冒号为什么就不行呢,select into :变量就行,具体我上面的语句,用动态语句三应该怎么写,能详细些吗?

#9


这个用动态SQL可以实现的,版主说的没错

#1


你这样做的目的是什么?  

#2


要通过 存储过程 动态生成数据窗口才能用动态表名,或通过完整的select语句动态生成数据窗口,生成数据窗口要有具体的字段属性,长度,表名都不清楚是不行的

#3


不需要生成数据窗口,我是要通过输入变量取得不同的表名
我想通过
select filed1 into :i from 变量表名 取得i的值 ,我的表名虽然不同,但结构是一样的。
只是为了取得一个字段的值而已。
在程序是通过变量取得表名,就不需要作不同的判断了。

#4


在pb程序中的script 中使用。

#5


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;            //关闭动态光标

#6


需要用到动态sql

#7


引用 6 楼 lzp_lrp 的回复:
需要用到动态sql


动态sql的四种用法之三

#8


没用过,表名前加冒号为什么就不行呢,select into :变量就行,具体我上面的语句,用动态语句三应该怎么写,能详细些吗?

#9


这个用动态SQL可以实现的,版主说的没错