从动态表中选择到 Datatable Oracle
Posted
技术标签:
【中文标题】从动态表中选择到 Datatable Oracle【英文标题】:Select from dynamic table into Datatable Oracle 【发布时间】:2013-01-30 20:39:59 【问题描述】:我正在寻找一个简单的选择语句来从 oracle 中的表中取回所有数据。由于正在进行的项目的性质,表格会不断更新和更改,因此我没有任何可靠的设计。
我正在寻找一个简单的陈述。这就是我需要它做的所有事情。
Select * from myVariable
搜索后我得到了编译
create or replace procedure "GET_TABLEINFO" (o_rc OUT sys_refcursor, inTableName IN varchar2) AS
BEGIN
execute immediate
'SELECT * FROM '||inTableName
using inTableName;
END;
但是当我尝试将其添加到数据表时:
using (OracleConnection cn = new OracleConnection(connectionString))
OracleDataAdapter da = new OracleDataAdapter();
OracleCommand cmd = new OracleCommand();
cmd.Connection = cn;
cmd.InitialLONGFetchSize = 1000;
cmd.CommandText = "GET_TABLEINFO";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("o_rc", OracleDbType.RefCursor, ParameterDirection.Output);
cmd.Parameters.Add("inTable", OracleDbType.Varchar2, 60, inTableName, ParameterDirection.Input);
da.SelectCommand = cmd;
da.Fill(dt);
我明白了
编辑:
我不确定如何设置游标(第一次使用oracle,通常使用SQLSERVER)。程序应该很简单。我传入表名,我需要从该表中获取数据。没有什么花哨的,没有 where 子句等。
ORA-01006:绑定变量不存在 ORA-06512:在 “ODS_DEV.GET_TABLEINFO”,第 4 行 ORA-06512:第 1 行
【问题讨论】:
是整个 SP 吗?您没有为 sys_refcursor 设置输出。还有什么是“使用inTableName;”。这是来自 c# 代码吗?您能否修复帖子以澄清该程序在做什么? 使用 inTableName 是我编译它的唯一方法using
子句用于绑定变量,但您的示例没有,因此出现“绑定变量不存在”错误。
【参考方案1】:
表名(和列名)不能是绑定变量。大概,您还希望您构建的 SQL 语句用于打开游标o_rc
。您的存储过程需要类似于
create or replace procedure GET_TABLEINFO (
o_rc OUT sys_refcursor,
inTableName IN varchar2)
AS
BEGIN
OPEN o_rc
FOR 'SELECT * FROM '||inTableName;
END;
当然,这会使系统极易受到 SQL 注入攻击。至少,您需要额外打一个dbms_assert
电话
create or replace procedure GET_TABLEINFO (
o_rc OUT sys_refcursor,
inTableName IN varchar2)
AS
BEGIN
OPEN o_rc
FOR 'SELECT * FROM '|| dbms_assert.sql_object_name( inTableName );
END;
【讨论】:
【参考方案2】:CREATE OR REPLACE PROCEDURE GET_TABLEINFO(o_rc OUT sys_refcursor, inTableName IN varchar2) AS
sqlquery VARCHAR2(32000);
BEGIN
sqlquery := 'SELECT * FROM ' || inTableName;
OPEN o_rc FOR sqlquery;
END;
【讨论】:
我花了几个小时寻找这个...谢谢一百万。以上是关于从动态表中选择到 Datatable Oracle的主要内容,如果未能解决你的问题,请参考以下文章
c# 如何从datatable中取出某列的值并去除这一列的相同值,并将这列添加到新的表中
C#如何将datatable中的数据批量更新到MYSQL数据库