teor tecnologia - treinamento plsql - ms sql comparison
Post on 02-Nov-2015
235 Views
Preview:
DESCRIPTION
TRANSCRIPT
-
Oracle SQLFunes comuns em MS SQL implementadas em Oracle
-
SELECTEm MS SQL
Select getdate()
Em Oracle
Select sysdate from dual;
A tabela DUAL, do owner SYS, uma tabela com uma nica coluna, DUMMY, e uma nica linha. O propsito servir como referncia para os casos onde desejamos executar uma funo do banco de dados e obter uma nica linha de retorno usando SQL.
-
SELECTEm MS SQL
Select getdate() data_do_dia into tabela_x
Em Oracle
Insert into tabela_x (data_do_dia) values (sysdate);
Em havendo apenas esta coluna na tabela, a sintaze abaixo tambm vlida:
Insert into tabela_x select sysdate from dual;
-
INSERTEm MS SQL
Insert tabela_x values (valor_do_campo_1, valor_do_campo_2)
Em Oracle
Insert into tabela_x values (valor_do_campo_1, valor_do_campo_2);
Insert into tabela_x select valor_do_campo_1, valor_do_campo_2 from dual;
-
UPDATEEm MS SQLupdate mytableset mycolumn=myothertable.mycolumnfrom mytable,myothertablewhere mytable.mycolumn like 'MY%'and myothertable.myothercolumn='some text';
Em Oracleupdate mytableset mycolumn=(select a.mycolumnfrom myothertable awhere myothertable.myothercolumn='some text';)where mytable.mycolumn like 'MY%';
-
DELETEEm MS SQL
delete mytable where mycolumn like 'some%';
Em Oracle
delete from mytable where mycolumn like 'some%';
-
DELETEEm MS SQL
Delete productsfrom products, product_deleteswhere products.a = product_deletes.aand products.b = product_deletes.band product_deletes.c = 'd';
-
DELETEEm Oracle
deletefrom productswhere ( a, b ) in( select a, bfrom product_deleteswhere c = 'd' );
-
MERGE (ORACLE)merge into bonuses d using(select employee_id, salary, department_id from employeeswhere department_id = 80) s on (d.employee_id = s.employee_id)when matched then update set d.bonus = d.bonus + s.salary * .01when not matched then insert (d.employee_id, d.bonus) values (s.employee_id, s.salary * .01);
-
JOINSA sintaxe INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, CROSS JOIN, FULL OUTER JOIN completamente suportada em Oracle
Porm...
Em MS SQLselect d.deptname, e.ename from dept d, emp e where d.empno *= e.enum
Em Oracleselect d.deptname,e.ename from dept d, emp e where d.empno = e.enum (+);
-
JOINSO uso dos smbolos para representar o lado OUTER no usual. Normalmente so usados os comandos para relacionamento LEFT OUTER JOIN, RIGHT OUTER JOIN, etc.
select d.deptname,e.ename from dept d left outer join emp on (d.empno = e.enum)
-
SUBQUERYEm MS SQL
select distinct year,q1 = (select Amount amt FROM saleswhere Quarter=1 AND year = s.year),q2 = (SELECT Amount amt FROM saleswhere Quarter=2 AND year = s.year),q3 = (SELECT Amount amt FROM saleswhere Quarter=3 AND year = s.year),q4 = (SELECT Amount amt FROM saleswhere Quarter=4 AND year = s.year)from sales s
-
SUBQUERYEm Oracle
SELECT year,DECODE( quarter, 1, amount, 0 ) q1,DECODE( quarter, 2, amount, 0 ) q2,DECODE( quarter, 3, amount, 0 ) q3,DECODE( quarter, 4, amount, 0 ) q4FROM sales s;
-
lias para ColunasEm MS SQL
Select c1 = coluna1, c2 = coluna2, c3 = coluna3 from tabela
Em Oracle
Select coluna1 as c1, coluna2 as c2, coluna3 as c2 from tabela;
-
Tipos de Dados
MS SQLOracleINTEGERNUMBER(10)SMALLINTNUMBER(6)TINYINTNUMBER(3)REALFLOATFLOATFLOATBITNUMBER(1)VARCHAR(n)VARCHAR2(n)TEXTCLOBIMAGEBLOBBINARY(n)RAW(n) or BLOBVARBINARYRAW(n) or BLOBDATETIMEDATESMALL-DATETIMEDATEMONEYNUMBER(19,4)NCHAR(n)CHAR(n*2)NVARCHAR(n)VARCHAR(n*2)SMALLMONEYNUMBER(10,4)TIMESTAMPNUMBERSYSNAMEVARCHAR2(30), VARCHAR2(128)
-
Dicionrio de DadosEm Oracle, temos 3 tipos de views para consultas no dicionrio de dados:DBA_*: Todas as views DBA_* disponibilizam uma viso completa da estrutura do banco de dadosALL_*: Todas as views ALL_* disponibilizam uma viso completa de tudo o que o usurio tem permisso de ver/manipular, inclundo PUBLICUSER_*: Todas as views USER_* disponibilizam uma viso completa de tudo o que o usurio possui
-
Dicionrio de Dados (Developer / AD)USER_OBJECTS: ObjetosUSER_TABLES: TabelasUSER_TAB_PARTITIONS: Parties de tabelasUSER_VIEWS: VisesUSER_TAB_COLUMNS: Colunas das tabelas e visesUSER_CONSTRAINTS: ConstraintsUSER_CONS_COLUMNS: Colunas das constraintsUSER_INDEXES: ndicesUSER_IND_COLUMNS: Colunas dos ndicesUSER_IND_EXPRESSIONS: Colunas dos ndices, quando funesUSER_SEQUENCES: SequnciasUSER_PROCEDURES: Procedimentos armazenados, funes e pacotesUSER_TRIGGERS: GatilhosUSER_SOURCE: Cdigo fonte de objetos compilados
-
Obter o cdigo DDL de um objetocreate or replace function sp_helptext(i_object_name in varchar, i_owner in varchar default user)return clobis result clob;begin result := null; select dbms_metadata.get_ddl (data.object_type, data.object_name, data.owner) into result from all_objects data where data.object_name = i_object_name and data.owner = i_owner; return result;exception when others then return null;end;/
-
Obter o cdigo DDL de um objetoselect sp_helptext ('HAND_DATA') from dual;
CREATE TABLE "PROJETOX"."HAND_DATA" ("LINE" NUMBER, "CONTENT" VARCHAR2(2048) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "SYSTEM"
-
Obter o cdigo DDL de um objetoselect sp_helptext ('SP_HELPTEXT') from dual;
CREATE OR REPLACE FUNCTION "PROJETOX"."SP_HELPTEXT" (i_object_name in varchar, i_owner in varchar default user)return clobis result clob;begin result := null; select dbms_metadata.get_ddl (data.object_type, data.object_name, data.owner) into result from dual, all_objects data where data.object_name = i_object_name and data.owner = i_owner; return result;exception when others then return null;end;
-
TOP 100Em MS SQL
Select top 100 * from clientes
Em Oracle
Select * from clientes where rownum
-
SEQUENCECreate sequence seq_x;
create sequence seq_x increment by 1 start with 1 maxvalue 1048576 minvalue 1 cache 128 order nocycle;
Select seq_x.nextval from dual;
Select seq_x.currval from dual; /* ltimo valor que a sua sesso pediu, no o valor atual do contador */
Quando informamos NOMAXVALUE, a sequence suporta at 10^28-1, ou seja, 9.999.999.999.999.999.999.999.999.999
-
DATEPART x EXTRACTSELECT DATEPART(year, '12:10:30.123') ,DATEPART(month, '12:10:30.123') ,DATEPART(day, '12:10:30.123') ,DATEPART(dayofyear, '12:10:30.123') ,DATEPART(weekday, '12:10:30.123'); Select extract (year from sysdate), extract (month from sysdate), extract (day from sysdate);
Select to_char (sysdate, WW) as semana_do_ano, to_char (sysdate, W) as semana_do_mes, to_char (sysdate, D) as dia_da_semana, to_char (sysdate, DAY) as nome_do_dia_da_semana from dual;
-
DATE functionsSelect dateadd (day, 10, getdate())
Select datediff (dd, getdate(), dateadd (day, 10, getdate())
SELECT DATENAME(month, getdate()) AS 'Month Name' Select sysdate + 10 from dual;
select (sysdate + 10) - sysdate from dual;
select to_char (sysdate, 'month') from dual;
select next_day (sysdate, 2) from dual; /* Prxima segunda-feira */
select last_day (sysdate) from dual; /* ltimo dia do ms */
-
ROUNDselect round (113.18, 1) from dual;select round (113.18, 0) from dual;select round (113.18, -1) from dual;select round (113.18, -2) from dual;select round (113.18, -3) from dual;
ROUND(113.18, 1) => 113.2ROUND(113.18, 0) => 113ROUND(113.18, -1) => 110ROUND(113.18, -2) => 100ROUND(113.18, -3) => 0
-
Outros...Select isnull(precounitario,0) from titmmovSelect substring(codconta, 1, 3) from ccontaSelect nvl(precounitario,0) from titmmovSelect substr(codconta, 1, 3) from ccontaSelect decode (4, 1, Varivel = 1, 2, Varivel = 2, 3, Varivel = 3, Varivel Desconhecida) from dual;
-
TEMPORARY TABLEcreate table ##loc_locacaotemp ( loc_in_codigo int not null, loc_dt_locacao smalldatetime, loc_re_valor numeric(12,2) );create global temporary table loc_locacaotemp ( loc_in_codigo int not null, loc_dt_locacao smalldatetime, loc_re_valor numeric(12,2) ) on commit preserve rows;
No existem tabelas temporrias a nvel de sesso, ou seja, correlatas s tabelas MS SQL com apenas um #.
-
INT IDENTITY em OracleCREATE TABLE departments ( ID NUMBER(10) NOT NULL, DESCRIPTION VARCHAR2(50) NOT NULL ); ALTER TABLE departments ADD( CONSTRAINT dept_pk PRIMARY KEY (ID));
CREATE SEQUENCE dept_seq;
CREATE OR REPLACE TRIGGER dept_bir BEFORE INSERT ON departments FOR EACH ROW WHEN (new.id IS NULL) BEGIN SELECT dept_seq.NEXTVAL INTO :new.id FROM dual;END;/
-
EXTERNAL TABLETabela externa, normalmente texto ASCII, que podemos ler como se fosse uma tabela regular do Oracle.
C:\> copy con countries1.txtENG,England,EnglishSCO,Scotland,EnglishIRE,Ireland,EnglishWAL,Wales,Welsh^Z 1 file(s) copied.
C:\> sqlplus system/system
SQL*Plus: Release 11.2.0.2.0 Production on Sun May 12 17:00:57 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL> create or replace directory root as 'c:\';
Directory created.
-
EXTERNAL TABLESQL> CREATE TABLE countries_ext ( 2 country_code VARCHAR2(5), 3 country_name VARCHAR2(50), 4 country_language VARCHAR2(50) 5 ) 6 ORGANIZATION EXTERNAL ( 7 TYPE ORACLE_LOADER 8 DEFAULT DIRECTORY root 9 ACCESS PARAMETERS ( 10 RECORDS DELIMITED BY NEWLINE 11 FIELDS TERMINATED BY ',' 12 MISSING FIELD VALUES ARE NULL 13 ( 14 country_code CHAR(5), 15 country_name CHAR(50), 16 country_language CHAR(50) 17 ) 18 ) 19 LOCATION ('Countries1.txt') 20 ) 21 PARALLEL 5 22 REJECT LIMIT UNLIMITED;
Table created.
-
EXTERNAL TABLESQL> select * from countries_ext;
COUNT COUNTRY_NAME COUNTRY_LANGUAGE----- -------------------------------------------------- --------------------------------------------------ENG England EnglishSCO Scotland EnglishIRE Ireland EnglishWAL Wales Welsh
SQL>
-
WRAPC:\> copy con fn_soma.sqlcreate or replace function fn_soma (i_valor1 in number, i_valor2 in number) return numberisbegin return i_valor1 + i_valor2;end;/^Z 1 file(s) copied.
C:\> wrap iname=fn_soma.sql oname=fn_soma.sqw
PL/SQL Wrapper: Release 11.2.0.2.0- Production on Sun May 12 16:54:30 2013
Copyright (c) 1993, 2009, Oracle. All rights reserved.
Processing fn_soma.sql to fn_soma.sqw
C:\>
-
WRAPC:\> type fn_soma.sqwcreate or replace function fn_soma wrappeda000000b2abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd874 8dtlZx2GMWU9FL+GpKsMirKNAga5gwg8eZgcfLCNL+XlrZbZb/ci5dJaVfKMfSCChlw6XSXqWZgTLAsiXMqRiIqNshvqxxhObWcHHRcnDRSeq/riTRRERNNmh2eVOf9tHqJB/2OaZU3ByY
/
-
WRAPC:\> sqlplus system/system @fn_soma.sqw
SQL*Plus: Release 11.2.0.2.0 Production on Sun May 12 16:55:03 2013
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
Function created.
SQL> select fn_soma (2, 3) from dual;
FN_SOMA(2,3)------------ 5
SQL>
-
Melhores prticas em SQLApenas alguns pontos
Refaa subconsultas muito complexas com tabelas temporriasUse a operao MINUS ao invs de usar NOT EXISTSEvite fazer clculos envolvendo colunas na clusula WHERE para comparar com algum valor especficoEvite o uso de NOT IN e HAVINGEvite o uso de LIKE com smbolo percentual esquerdaNunca misture tipos de dados diferentesUse o decode ou case sempre que necessrio, principalmente quando houverem expresses de agregaoVrios livros a respeito do tema disponveis no mercadohttp://www.oracle.com/pls/db112/homepage - Todos os manuais para Oracle 11g R2
top related