多个oracle查询问题

时间:2011-07-14 10:39:32

标签: .net sql oracle multiple-tables

我正在尝试从.NET页面运行查询,但我似乎遇到了多个查询的问题。

我的查询与此类似

SELECT * FROM table1; SELECT * from table2

但是从.Net页面执行此操作时,我似乎遇到了无效的字符错误。它在SQL开发人员中运行良好,但只有在我将其放入.NET页面时才会失败。

我已将BEGINEND添加到查询中,因为有些网站建议您需要此操作来运行多个查询,但后来我收到以下错误

  

ORA-06550:第1行第7栏:   PLS-00428:此SELECT语句中需要INTO子句

任何人都可以对这一点有所了解吗?

提前致谢!

修改

这是一些代码

        query = conn.CreateCommand()

        query.CommandText = "SELECT * from table1; SELECT * FROM table2;"

        DataSet = New DataSet()
        DataAdapter = New DataAdapter(query)
        DataAdapter.Fill(DataSet)

        datagrid1.DataSource = DataSet.Tables(0)
        datagrid1.DataBind()

        lbl1.Text = DataSet.Tables(1).Rows(0).Item("column1").ToString()

4 个答案:

答案 0 :(得分:2)

如果你想从2个表中获取并获得一个可以填入DataAdapter的DataSet,那么你需要使用以下方法之一:

  1. 将两张桌子连在一起(可能会或可能不会取决于您的牌桌)
  2. 联合2个表(这可能适用于您的方案,也可能不适用)
  3. 编写一个存储过程,创建您需要的任何结果并将其返回到ref游标中。您可以阅读有关如何执行此操作here
  4. 你不可能只运行2个这样的SQL语句,并将任何有意义的结果带入DataSet。

答案 1 :(得分:0)

道歉但是:

1 ..拨2个电话

2 ..将选择放入存储过程并返回2个refcursors

这是使用多个结果集的一个很好的链接: http://msdn.microsoft.com/en-us/library/ms971506.aspx#msdnorsps_topic13

答案 2 :(得分:0)

如果您只需要table1和table2中都存在的字段,则可以执行

SELECT field1, field2, field3 FROM table1
UNION
SELECT field1, field2, field3 FROM table2

如果字段名称不同,但您可以使用相同类型的内容

SELECT tab1_id AS primary_key, tab1_name AS name, tab1_amount AS amount FROM table1
UNION
SELECT tab2_id AS primary_key, tab2_name AS name, tab2_amount AS amount FROM table2

这会给你一个带有primary_key,name,amount列的结果(这只是一个随机的例子)

如果两个表包含完全不同的内容,您应该使用两个单独的查询。

答案 3 :(得分:0)

可能的解决方案可能是

query.CommandText = "BEGIN OPEN :1 FOR SELECT * FROM table1; OPEN :2 FOR SELECT * FROM table2; END;"; 

...在DataSet.Load: Loading multiple tables with System.Data.OracleClient.OracleDataReader中找到...但未经过自我测试。

同时查看http://forums.asp.net/t/629511.aspx/1。它显示了如何,有点。我添加了对Oracle.DataAccess.Types;的引用,但仍然有问题。它虽然很接近。