개발 버전 :Devel
지원되지 않은 버전 :12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1

41.13. 에서 포팅Oracle토토 사이트/sql#

이 섹션은의 차이점을 설명합니다.PostgreSQL's토토 사이트/pgsql언어 및 Oracle 's토토 사이트/sql언어, 응용 프로그램을 포트하는 개발자를 돕기 위해Oracle® toPostgreSQL.

토토 사이트/pgsql는 여러 측면에서 PL/SQL과 유사합니다. 블록 구조화되고 명령적인 언어이며 모든 변수를 선언해야합니다.토토 사이트/sqlto토토 사이트/pgsqlare :

  • SQL 명령에 사용 된 이름이 명령에 사용 된 테이블의 열 이름이거나 함수 변수에 대한 참조토토 사이트/sql열 이름으로 취급합니다. 기본적으로토토 사이트/pgsql이름이 모호하다고 불평하는 오류가 발생합니다. 지정할 수 있습니다토토 사이트pgsql.variable_conflict = use_column일치하도록이 동작을 변경하려면토토 사이트/sql, 설명 된대로섹션 41.11.1. 처음에는 그러한 모호성을 피하는 것이 가장 좋습니다. 그러나이 동작에 의존하는 많은 양의 코드를 포트 해야하는 경우variable_conflict최상의 솔루션 일 수 있습니다.

  • inPostgreSQL함수 본문은 문자열 문자로 작성되어야합니다. 따라서 기능 본문에서 달러 인용문을 사용하거나 단일 따옴표를 탈출해야합니다.섹션 41.12.1.)

  • 데이터 유형 이름은 종종 번역이 필요합니다. 예를 들어, Oracle String에서 값은 일반적으로 유형으로 선언됩니다varchar2, 비 SQL 표준 유형입니다. 안에PostgreSQL, 유형 사용varchar또는텍스트대신. 마찬가지로 유형을 대체합니다번호with숫자또는 더 적절한 데이터 유형이있는 경우 다른 숫자 데이터 유형을 사용하십시오.

  • 패키지 대신 스키마를 사용하여 기능을 그룹으로 구성하십시오.

  • 패키지가 없으므로 패키지 수준 변수도 없습니다. 이것은 다소 성가시다.

  • 정수for루프Reverse다르게 작업 :토토 사이트/sql두 번째 숫자에서 첫 번째 숫자로 카운트 하락하고토토 사이트/pgsql첫 번째 숫자에서 두 번째 숫자로 카운트 하락하여 포팅 할 때 루프 경계를 교환해야합니다. 이 비 호환성은 불행하지만 변경되지는 않을 것입니다.섹션 41.6.5.5.)

  • for쿼리를 통한 루프 (커서 제외)도 다르게 작동합니다. 대상 변수가 선언되었지만토토 사이트/sql항상 암시 적으로 선언합니다. 이것의 장점은 루프 종료 후에도 가변 값이 여전히 액세스 할 수 있다는 것입니다.

  • 커서 변수 사용에는 다양한 표기법 차이가 있습니다.

41.13.1. 포팅 예제#

예 41.9간단한 기능을 포트하는 방법을 보여줍니다토토 사이트/sqlto토토 사이트/pgsql.

예 41.9. 에서 간단한 기능 포팅토토 사이트/sqlto토토 사이트/pgsql

여기에Oracle 토토 사이트/sql기능 :

함수 작성 또는 교체 CS_FMT_BROWSER_VERSION (V_NAME VARCHAR2,                                                  v_version varchar2)

이 기능을 살펴보고에 비해 차이점을 보자.토토 사이트/pgsql:

  • 유형 이름varchar2변경해야합니다varchar또는텍스트. 이 섹션의 예에서 우리는를 사용할 것입니다.varchar그러나텍스트특정 문자열 길이 한계가 필요하지 않으면 종종 더 나은 선택입니다.

  • thereturn함수 프로토 타입의 키워드 (기능 본문이 아님)가됩니다반환inPostgreSQL. 또한,isas언어절의 절기토토 사이트/pgsql유일한 기능 언어는 아닙니다.

  • inPostgreSQL, 기능 본문은 문자열 문자로 간주되므로 그 주변의 견적 표시 또는 달러 인용문을 사용해야합니다. 이것은 종료를 대신합니다/Oracle 접근법에서.

  • the오류 표시명령이 존재하지 않습니다PostgreSQL, 오류가 자동으로보고되어 필요하지 않습니다.

이것은이 기능이 포팅되었을 때 어떻게 보이는지입니다.PostgreSQL:

함수 생성 또는 교체 CS_FMT_BROWSER_VERSION (V_NAME VARCHAR,                                                  v_version varchar)

예 41.10다른 함수를 생성하는 함수를 포트하는 방법과 그에 따른 인용 문제를 처리하는 방법을 보여줍니다.

예 41.10. 에서 다른 함수를 생성하는 함수 포팅토토 사이트/sqlto토토 사이트/pgsql

다음 절차는 a에서 행을 잡습니다.select명령문과 결과와 함께 큰 기능을 구축합니다.if진술, 효율성을위한 진술.

이것은 Oracle 버전입니다 :

절차 작성 또는 교체 CS_UPDATE_REFERRER_TYPE_PROC IS    Cursor referrer_keys입니다

이 기능이 어떻게 끝나는 지PostgreSQL:

절차 작성 또는 교체 CS_UPDATE_REFERRER_TYPE_PROC ()는 $ func $로선언하다

함수의 본문이 어떻게 별도로 만들어지고 통과되는지 알 수 있습니다QUOTE_LITERAL그 안에 인용 표시를 두 배로 늘리십시오. 이 기술은 새로운 기능을 정의하기 위해 안전하게 달러 인용을 사용할 수 없기 때문에 필요합니다.referrer_key.key_string필드. (우리는 여기서 그것을 가정하고 있습니다in항상 신뢰할 수 있습니다host, 도메인또는url그러나referrer_key.key_string특히 달러 표시가 포함될 수 있습니다.)이 기능은 실제로 Oracle Original에서 개선 된 것입니다.referrer_key.key_string또는referrer_key.referrer_type견적 표시 포함.


예 41.11out매개 변수 및 문자열 조작.PostgreSQL내장이 없습니다instr함수이지만 다른 함수의 조합을 사용하여 하나를 만들 수 있습니다. 안에섹션 41.13.3a토토 사이트/pgsql구현instr포팅을 더 쉽게하기 위해 사용할 수 있습니다.

예 41.11. 문자열 조작으로 절차 포팅 및out매개 변수토토 사이트/sqlto토토 사이트/pgsql

다음OraclePL/SQL 절차는 URL을 구문 분석하고 여러 요소 (호스트, 경로 및 쿼리)를 반환하는 데 사용됩니다.

이것은 Oracle 버전입니다 :

절차 작성 또는 교체 CS_PARSE_URL (    Varchar2의 v_url,

여기에 가능한 번역이 있습니다토토 사이트/pgsql:

함수 작성 또는 교체 CS_PARSE_URL (    Varchar의 v_url,

이 기능은 다음과 같이 사용할 수 있습니다.

선택 *에서 CS_PARSE_URL ( 'http://foobar.com/query.cgi?baz');

예 41.12Oracle과 관련된 수많은 기능을 사용하는 절차를 포트하는 방법을 보여줍니다.

예 41.12. 절차 포팅토토 사이트/sqlto토토 사이트/pgsql

Oracle 버전 :

절차 작성 또는 교체 CS_CREATE_JOB (v_JOB_ID Integer)는 IS입니다    a_running_job_count 정수;

이것이 우리 가이 절차를 포트 할 수있는 방법입니다토토 사이트/pgsql:

절차 작성 또는 교체 CS_CREATE_JOB (V_JOB_ID INTEGER)를 $$선언하다(1)    끝 IF;(2)            - 이미 존재하는지 걱정하지 마십시오

(1)

의 구문Rain기본 사례이지만 Oracle의 진술과 상당히 다릅니다Rain Exception_name비슷하게 작동합니다.

(2)

예외 이름이 지원하는토토 사이트/pgsql는 Oracle 's와 다릅니다. 내장 예외 이름 세트가 훨씬 큽니다 (부록 A). 사용자가 선택한 SQLSTATE 값을 대신 던질 수 있지만 현재 사용자 정의 예외 이름을 선언하는 방법은 없습니다.


41.13.2. 지켜봐야 할 다른 것들#

이 섹션은 Oracle을 포팅 할 때 볼 수있는 다른 몇 가지 사항을 설명합니다토토 사이트/sql함수PostgreSQL.

41.13.2.1. 예외 후 암시 적 롤백#

in토토 사이트/pgsql, 예외가 AN에 의해 ​​잡히면예외조항, 블록 이후 모든 데이터베이스 변경시작자동으로 롤백됩니다. 즉, 행동은 다음과 같이 오라클에서 얻는 것과 동일합니다.

시작    SavePoint S1;

사용하는 Oracle 절차를 번역하는 경우SavePointand롤백으로이 스타일에서는 작업이 쉽습니다.SavePointand롤백으로. 사용하는 절차가있는 경우SavePointand롤백으로다른 방식으로 실제 사고가 필요합니다.

41.13.2.2. execute #

the토토 사이트/pgsql버전execute토토 사이트/sql버전이지만 사용하는 것을 기억해야합니다QUOTE_LITERALandQUOTE_INDEN설명대로섹션 41.5.4. 유형의 구성execute 'select * from $ 1';이 함수를 사용하지 않으면 안정적으로 작동하지 않습니다.

41.13.2.3. 최적화토토 사이트/pgsql기능#

PostgreSQL실행을 최적화하기 위해 두 가지 기능 생성 수정자를 제공합니다.변동성(동일한 인수가 주어지면 함수가 항상 동일한 결과를 반환하는지 여부) 및엄격함(인수가 null이면 함수가 null을 반환하는지 여부). 상담함수 생성자세한 내용 참조 페이지.

이러한 최적화 속성을 사용할 때함수 생성진술은 다음과 같이 보일 수 있습니다 :

함수 생성 foo (...)는 정수를 $$로 반환합니다...

41.13.3. 충수#

이 섹션은 Oracle과 호환성 세트에 대한 코드가 포함되어 있습니다instr포팅 노력을 단순화하는 데 사용할 수있는 기능.

-- Oracle의 상대를 모방하는 기기 기능

정정 제출

문서에 올바른 것이 없으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다.이 양식문서 문제를보고하려면