SQL Server에서 Oracle로 이동하는 개발자
-
09-06-2019 - |
문제
우리는 새 프로젝트를 사내에 가져오고 있으며 이전에는 모든 작업이 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;
그리고 "예, 그렇습니다. 그렇지 않습니다."라는 상황을 피하기 위해 여기 외부 링크가 있습니다