Oracle SQL Developer에 SQL 쿼리를 작성하여 행이 있으면 업데이트하고 그렇지 않은 경우 삽입합니다. 기본 키 (UNITOFMEASURE_USERID) 외에도 UNITOFMEASUREID, USERID 및 ACTIVE의 세 열이 있습니다. UNITOFMEASUREID와 USERID의 조합에 대한 고유 한 제한 사항이 있으므로 값의 각 조합에 대해 하나의 행 또는 0이 있습니다. 두 가지 다른 SQL 배열을 시도하고 있으며 둘 다 누락 된 권리에 대해 불평하는 비슷한 컴파일 오류를 반환합니다 괄호. 이 내가 시도 것입니다 : 먼저 배열 :Oracle SQL Developer : If Exists Update Else 삽입 누락 된 오른쪽 괄호 컴파일러 오류 삽입
Error at Command Line:1 Column:46
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
두 번째 배열 : 초
IF EXISTS (SELECT * FROM NORSEMEN.UNITOFMEASURE_USER WHERE UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId)
UPDATE NORSEMEN.UNITOFMEASURE_USER SET (ACTIVE = 1) UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId
ELSE
INSERT INTO NORSEMEN.UNITOFMEASURE_USER (UNITOFMEASUREID, USERID) VALUES (:unitOfMeasureId, :userId)
SQL 개발자 오류 응답 먼저 배열에 대한
UPDATE NORSEMEN.UNITOFMEASURE_USER SET (ACTIVE=1) WHERE UNITOFMEASUREID=:unitOfMeasureId AND USERID=:userId
IF @@ROWCOUNT=0
INSERT INTO NORSEMEN.UNITOFMEASURE_USER (UNITOFMEASUREID, USERID) VALUES (:unitOfMeasureId, :userId)
SQL 개발자 오류 응답 배열 :
Error at Command Line:2 Column:47
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
*Cause:
*Action:
SQL Developer가 누락 된 괄호가 있다고 생각하는 이유를 알아 내지 못했습니다. 아무도 도와 줄 수 있습니까?
요아킴의 관찰과 마찬가지로, @@ rowcount는 오라클 구문이 아닙니다. 아마도 두 번째 오류가 2 번 라인에 대한 것이기 때문에 PL/SQL 블록에서이 작업을 수행하고있을 것입니다. 어느 쪽이든 [merge] 문을 고려해야합니다 (http://docs.oracle.com/cd/). E11882_01/server.112/e10592/statements_9016.htm) 'upsert'를 수행하십시오. 예를 들어 [this] (http://stackoverflow.com/q/237327/266304)를 참조하십시오. –
모든 절차 코드는 Oracle의 PL/SQL이 아닌 Microsoft SQL Server의 T-SQL과 비슷합니다. 예를 들어, PL/SQL에서'else'가없는'if' 문은'IF 조건입니다 'THEN << 하나 이상의 문 >> END IF; else if'IF 조건 << THEN << 하나 이상의 문 >> ELSE < <하나 이상의 문장 >> END IF;'PL/SQL을 배우기위한 다른 참고 자료, 튜토리얼 및/또는 예제를 찾을 것을 권장합니다. 무료 참조 : http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/toc.htm. 무료 튜토리얼 : http://www.amazon.com/dp/0596514468 –
오라클의 PL/SQL은 if 문을 조건부로 하위 쿼리를 허용하지 않습니다. 그래서 두 번째는'SELECT count (*) INTO : rowCount FROM NORSEMEN.UNITOFMEASURE_USER WHERE UNITOFMEASUREID = : unitOfMeasureId and USERID = : userId and ROWNUM <= 1; IF : rowCount> 0 THEN ... ELSE ... END IF;'단지'merge'를 사용하십시오. –