1

このSQLは次のようなエラーを出します

ORA-01733: ここでは仮想列は許可されていません。

関数がなくGET_PROPERTYても、SQL は機能します。それを解決する方法は?

UPDATE (SELECT VALUE, GET_PROPERTY (ORG.ID, 'BenefOperationCode') AS OPERATION_CODE
      FROM ORGANIZATION ORG, PROPERTY P
     WHERE ORG.EXTERNALKEY = '111' AND P.ID = ORG.ID AND P.IDX = 4)
SET VALUE = 123, OPERATION_CODE = 234;
4

1 に答える 1

3

編集: ORA-01776 エラーのため、以下の更新は機能しません (Vincent に感謝します)。新しい方法については、投稿の最後を参照してください。

関数の結果を更新しようとしています。これは不可能です。関数によって取得される基になる値を更新しようとしていると思います。これを行うには、関数コードを Organization と Property の間の結合と組み合わせる必要があります。

GET_PROPERTY があるとしましょう:

CREATE OR REPLACE FUNCTION GET_PROPERTY
(
    objectID_in NUMBER,
    propertyName_in VARCHAR
)
AS
    v_returnValue VARCHAR(32);
BEGIN
    SELECT
        PropertyValue INTO v_returnValue 
    FROM
        PropertyTable
    WHERE
        ObjectID = objectID_in
    AND PropertyName = propertyName_in;

    RETURN v_returnValue;
END

更新は次のようになります。

--This wouldn't have worked.

編集:それを行うための手順を書くのが最善です。

CREATE PROCEDURE UpdateMyTwoTables
(
    orgExternalKey_in in VARCHAR,
    propertyIdx_in in NUMBER,
    propertyName_in in VARCHAR,
    newValue_in in VARCHAR,
    newPropertyValue_in in VARCHAR
)
AS
BEGIN
    UPDATE
    (SELECT
        ORG.Value
    FROM
        ORGANIZATION ORG, 
        PROPERTY P
    WHERE 
        ORG.EXTERNALKEY = orgExternalKey_in 
        AND P.ID = ORG.ID AND 
        P.IDX = propertyIdx_in)
    SET
        Value = newValue_in;

    UPDATE
    (SELECT
        PropertyValue
    FROM
        PropertyTable,
        ORGANIZATION ORG,
        PROPERTY P
    WHERE
        PropertyTable.objectID = ORG.ID
    AND ORG.ID = P.ID
    AND ORG.EXTERNALKEY = orgExternalKey_in
    AND P.Idx = propertyIdx_in
    AND PropertyTable.PropertyName = propertyName_in)
    SET
        PropertyValue = newPropertyValue_in;


END;
于 2012-09-21T10:16:38.340 に答える