문제

우리는 새 프로젝트를 사내에 가져오고 있으며 이전에는 모든 작업이 SQL Server에서 이루어졌으나 새 제품에서는 Oracle 백엔드를 사용합니다.

누구든지 나 같은 SQL Server 사용자에게 주요 차이점이 무엇인지 요약할 수 있는 유아용 침대 시트 등을 조언할 수 있습니까? 가능한 한 빨리 시작하고 실행할 수 있기를 바랍니다.

도움이 되었습니까?

해결책

@hamishcmcn

'' == Null이라는 귀하의 주장은 사실이 아닙니다.관계형 세계에서 Null은 "모르겠어요"라는 의미로만 읽어야 합니다.값을 Null과 비교할 때 Oracle(및 대부분의 다른 괜찮은 데이터베이스)에서 얻을 수 있는 유일한 결과는 'False'입니다.

내 머릿속에서 SQL Server와 Oracle의 주요 차이점은 다음과 같습니다.

  • 트랜잭션을 사랑하는 법을 배우십시오. 그들은 당신의 친구입니다. 자동 커밋은 그렇지 않습니다.
  • 읽기 일관성 및 읽기 차단 부족
  • SQL Server 데이터베이스 == Oracle 스키마
  • PL/SQL은 T-SQL보다 훨씬 더 풍부한 기능을 제공합니다.
  • Oracle의 인스턴스와 데이터베이스의 차이점 알아보기
  • 서버에는 둘 이상의 Oracle 인스턴스가 있을 수 있습니다.
  • 뾰족한 클릭 마법사 없음(정말로 원하지 않는 한)

다른 분들은 저를 도와주시고 더 추가해주세요.

다른 팁

SQL Server에서 Oracle로 이동할 때 제가 느낀 주요 차이점은 Oracle에서는 SELECT 문에 커서를 사용해야 한다는 것입니다.또한 임시 테이블은 다르게 사용됩니다.SQL Server에서는 프로시저에서 테이블을 생성한 다음 마지막에 DROP할 수 있지만 Oracle에서는 프로시저가 실행되기 전에 이미 임시 테이블이 생성되어 있어야 합니다.

데이터 유형도 상당히 다르기 때문에 살펴보겠습니다.

문자열 연결:
신탁:|| 또는 concat ()
SQL 서버:+

다음 링크가 흥미로울 수 있습니다.
http://www.dba-oracle.com/oracle_news/2005_12_16_sql_syntax_differences.htm
http://www.mssqlcity.com/Articles/Compare/sql_server_vs_oracle.htm (오래된 것:Ora9 대 Sql 2000)

@hamishmcn

일반적으로 그것은 나쁜 생각입니다..oracle의 임시 테이블은 생성하고 그대로 두어야 합니다(한 번만 사용하거나 거의 사용하지 않는 한).임시 테이블의 내용은 각 세션에 대해 로컬이며 세션이 닫힐 때 잘립니다.임시 테이블을 생성/삭제하는 데 드는 비용은 거의 없으며, 두 프로세스가 동시에 테이블을 생성하려고 시도하고 DDL 수행으로 인해 예상치 못한 커밋이 발생하는 경우 충돌이 발생할 수도 있습니다.

여기서 질문하신 내용은 매우 큰 주제입니다. 특히 데이터베이스를 어떤 용도로 사용하는지 언급하지 않으셨기 때문에 더욱 그렇습니다(예: TSQL -> PL/SQL에서 갈 것인지, 아니면 Java 애플리케이션에서 백엔드 데이터베이스를 변경할 것인지) 연결되어 있나요?)

선택한 데이터베이스를 최대한 활용하는 것에 대해 진지하게 생각하고 있다면 좀 더 자세히 알아보고 다음과 같은 내용을 읽어 보시기 바랍니다. 전문적인 Oracle 데이터베이스 아키텍처:9i 및 10g 프로그래밍 기술 및 솔루션 톰 카이트 지음.

빈 문자열을 처리하는 방식의 차이에 주의하세요.
INSERT INTO atable (a_varchar_column) VALUES ('');

와 같다

INSERT INTO atable (a_varchar_column) VALUES (NULL);

나는 어떤이 없습니다 sqlserver 경험했지만 둘 사이의 차이점을 이해합니다.

필요한 경우 다음을 사용하여 프로시저에서 임시 테이블을 생성하고 삭제할 수 있습니다. 즉시 실행 명령.

andy47의 경우 비교에 빈 문자열을 사용할 수 있다는 의미는 아니지만 삽입에 사용할 경우 Oracle은 이를 null처럼 처리합니다.내 항목을 다시 읽은 후 다음 SQL을 시도해 보십시오.

CREATE TABLE atable (acol VARCHAR(10));
INsERT INTO atable VALUES( '' );
SELECT * FROM atable WHERE acol IS NULL;

그리고 "예, 그렇습니다. 그렇지 않습니다."라는 상황을 피하기 위해 여기 외부 링크가 있습니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top