如何将BOOLEAN传递给Oracle 12c程序?

时间:2016-03-04 00:54:06

标签: c# oracle12c odp oracle-manageddataaccess

如何将BOOLEAN传递给12c中的Oracle过程?

我听说12c之前不可能,但我仍然无法在12c中完成。

// https://docs.oracle.com/cd/A91202_01/901_doc/appdev.901/a89852/d_metad8.htm
// PROCEDURE set_transform_param (
//     transform_handle        IN  NUMBER,
//     name                    IN  VARCHAR2,
//     value                   IN  BOOLEAN DEFAULT TRUE,
//     object_type             IN  VARCHAR2 DEFAULT NULL);
var cmd = new OracleCommand();
cmd.Connection = new OracleConnection(this.scon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "DBMS_METADATA.SET_TRANSFORM_PARAM";
cmd.BindByName = true;
cmd.Parameters.Add("transform_handle", OracleDbType.Int64).Value = -1;
cmd.Parameters.Add("name", OracleDbType.Varchar2).Value = "STORAGE";
cmd.Parameters.Add("value", "N");
cmd.Connection.Open();
cmd.ExecuteNonQuery();

我尝试了以下操作,但收到错误。

"0", "F", "N", '0', 'F', 'N'

错误:

ORA-31600: invalid input value "0" for parameter STORAGE in function SET_TRANSFORM_PARAM
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 105
ORA-06512: at "SYS.DBMS_METADATA_INT", line 8680
ORA-06512: at "SYS.DBMS_METADATA_INT", line 10027
ORA-06512: at "SYS.DBMS_METADATA", line 7458
ORA-06512: at line 1

1 个答案:

答案 0 :(得分:0)

我有同样的问题。

我通过解决方法解决了这个问题。

1)创建一个包装的存储过程,然后你可以使用boolean或其他参数,如pl-sql;

2)在同一个会话中调用包装的存储过程(相同的OracleConnection);

3)在同一会话中调用SELECT DBMS_METADATA.GET_DDL;

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.malcolmshingirai.mypay">

    <uses-permission android:name="android.permission.CALL_PHONE" />

    <application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    </application>

    </manifest>

希望它可以帮助某人,因为我从互联网上获得所有提示。