1

Oracle との接続を初めてテストしています。接続自体は機能しているようです。でも...

my_core.my_table から上位 1 つの ID を選択

私が使っている文は

そして

retVal = cmd1.ExecuteScalar().ToString();

スロー

ORA-00923: FROM キーワードが予期された場所に見つかりませんでした

   in Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode,
OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src
, String procedure, Boolean bCheck)
   in Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, Oracle
Connection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx
, Object src, Boolean bCheck)
   in Oracle.DataAccess.Client.OracleCommand.ExecuteReader(Boolean requery, Bool
ean fillRequest, CommandBehavior behavior)
   in Oracle.DataAccess.Client.OracleCommand.ExecuteReader()
   in Oracle.DataAccess.Client.OracleCommand.ExecuteScalar()
   in thiscs.Main() en C:\app\testuser\product\11.2.0\my\sample\thiscs.cs:line 44

コードは次のとおりです。

// C#

using System;
using Oracle.DataAccess.Client;
using System.Data;
using System.Data.Common;
using System.Transactions;

class thiscs
{
  static void Main()
  {
    string retVal = string.Empty;
    string providerName = "Oracle.DataAccess.Client";
    #region constr
    string constr =
       @"User Id=mytestuser;Password=mytestpass;Data Source=10.210.10.81:1521/my.svc.net;";

    #endregion

    // Get the provider factory.
    DbProviderFactory factory = DbProviderFactories.GetFactory(providerName);

    try
    {
      // Open a connection to the DB.
      DbConnection conn1 = factory.CreateConnection();
      conn1.ConnectionString = constr;
      conn1.Open();

      // Create a command to execute the sql statement.
      DbCommand cmd1 = factory.CreateCommand();
      cmd1.Connection = conn1;
      cmd1.CommandText = @"SELECT TOP 1 ID FROM my_core.my_table";
      
      // Execute the SQL statement to Select one rowfield in DB.
      retVal = cmd1.ExecuteScalar().ToString();
      Console.WriteLine("Field to be showed by cmd1: {0}", retVal);

      // close and dispose the connection
      conn1.Close();
      conn1.Dispose();
      cmd1.Dispose();
    }
    catch (Exception ex)
    {
      Console.WriteLine(ex.Message);
      Console.WriteLine(ex.StackTrace);
    }
  }
}

私も試しました

my_core.my_table から上位 1 [ID] を選択

SELECT 'ねえりんご、りんご、ねえ'

両方とも同じ結果: ORA-00923: FROM キーワードが期待される場所に見つかりません

何か案は?ティア!

4

1 に答える 1

8

TOPは、オラクル語彙のキーワードではありません。少なくとも、必要なコンテキストではありません。

TOPは、Microsoft SQL Server で使用される構文です。

これを複製するには、SQL を次のように書き換えます。

SELECT ID FROM my_core.my_table WHERE rownum <= 1

つまり、次のように変換します。

this: SELECT TOP N .... WHERE ...
                 |
                 +------------------------------+
                                                v
to:   SELECT       .... WHERE ... AND rownum <= N

こちらもご覧ください:

また、例に示されているように、クエリはかなり無意味であることに注意してください。時間、インデックスの使用法、テーブルの編成などは変更されます。つまり、順序を指定しない限り、取得する特定の ID が変更される可能性があります。

于 2013-03-15T20:50:17.267 に答える