編集: 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;