當前位置:首頁 » 編程語言 » sqlfororacle

sqlfororacle

發布時間: 2022-12-12 01:17:07

『壹』 oracle存儲過程循環執行sql語句

實現方式錯了,批量移動數據應該使用Cursor,而不是像分頁那樣每次都查詢。
每次都查詢可能會導致重復數據。
正確方式應該是打開一個Cursor,循環Cursor來插入,使用計數器來控制每次COMMIT的行數:
declare
TYPE R_CURSOR IS REF CURSOR;
i number;
a1_cursor R_CURSOR;
a1_row A1%ROWTYPE;
begin
open a1_cursor FOR
select ID, NAME from A1;
i := 0;
loop
fetch a1_cursor
into a1_row;
exit when a1_cursor%notfound;
INSERT INTO A2 VALUES a1_row;
i := i + 1;
if i >= 5 then
commit;
i := 0;
end if;
end loop;
close a1_cursor;
commit;
end;

『貳』 在sqlserver中 與oracle的表連接查詢

在我們使用SQL Server資料庫的過程中,有時需要將SQL Server數據導出,導入到其他的資料庫中,比如導入到Oracle中。

假設要將SQL Server中的Northwind資料庫中的Procts表導出到Oracle的Scott用戶

首先需要有安裝SQL Server企業版

1.打開工具:

開始->程序->

導入和SQL Server數據導出數據

2.下一步,選擇數據源

[數據源]選擇「用於SQL Server的Microsoft OLE DB提供程序」,這應該是預設值。

[伺服器]選擇要導出數據的伺服器,如果是本機,選擇(local)

[資料庫]選擇要導出的數據所在的庫,這里選擇Northwind

3.下一步,選擇目的

[目的]選擇Microsoft ODBC for Oracle

[DSN]選擇用戶/系統DSN一項,然後在下拉列表框中找一個已經連接到了Scott用戶的DSN名稱。

如果下拉列表中沒有,點下拉列表框右側的[新建],出現創建新數據源界面。

接下來選擇系統數據源,下一步,在驅動程序列表中選擇Microsoft ODBC for Oracle

下一步,完成,出現Microsoft ODBC for Oracle安裝界面

[數據源名稱]隨便輸入,比如sss

[說明]可以不填

[用戶名稱]填入要SQL Server數據導出到的Oracle用戶名稱,這里是scott

[伺服器]填入要連接到Oracle伺服器所使用的服務名,比方說使用sqlplus scott/tiger@server1可以連接到資料庫,那麼這里就填入server1。如果本機就是伺服器,使用sqlplus scott/tiger即可連接到資料庫,這里空著不填即可。

這樣就創建好了一個數據源sss,保證下拉列表框中選擇了sss一項。

[用戶名]填入SQL Server數據導出到的Oracle用戶名稱,這里是scott

[密碼]填入SQL Server數據導出到的Oracle用戶使用的密碼,這里是tiger

4.下一步,指定表復制或查詢

如果要導出的內容是整個表,選擇[從源資料庫復製表和視圖]

如果要導出的內容是表的一部分列,行,可以選擇[用一條查詢指定要傳輸的數據],這時需要寫出一個查詢語句

這里選擇第一項[從源資料庫復製表和視圖]

5.下一步,選擇源表和視圖

點中要導出的表Procts一行的復選框,目的、轉換兩欄就會出現內容。

目的可以用來選擇表名。轉換可以用來修改列的數據類型或是整個建表的SQL語句

6.下一步,保存、調度和復制包

選中立即運行

7.下一步,正在完成DTS導入/導出向導

8.完成

提示「成功地將n個表從Microsoft SQLServer復制到了Oracle」

9.完成,關閉導入導出程序

注意:因為oracle的表名都是大寫的,而SQL的表可能是大小混寫的,所以導入後在oracle里查不到該表,比如這個Procts表在oracle里查詢就應該寫成select * from scott."Procts";為了方便查詢可以通過批量修改表名為大寫以便後面導數據的工作。

---導完數據後執行下面語句,生成把表名修改成大寫的操作

select 'ALTER TABLE '||'"'||table_name||'"'||' RENAME TO '|| upper(table_name)||';' from user_tab_comments;

把生成的文件執行即可把此用戶下的所有表名修改成大寫。

『叄』 如何使用oracle提供的SQL

使用oracle提供的SQL跟其他資料庫一樣,都是標準的sql語句。
Oracle基本語法集錦

1、表

create table test (names varchar2(12),
dates date,
num int,
dou double);
2、視圖

create or replace view vi_test as
select * from test;
3、同義詞

create or replace synonym aa
for dbusrcard001.aa;
4、存儲過程

create or replace proce dd(v_id in employee.empoy_id%type)
as
begin

end
dd;
5、函數

create or replace function ee(v_id in employee%rowtype) return varchar(15)
is
var_test varchar2(15);
begin
return var_test;
exception when others then

end
6、三種觸發器的定義

create or replace trigger ff
alter delete
on test
for each row
declare
begin
delete from test;
if sql%rowcount < 0 or sql%rowcount is null then
rais_replaction_err(-20004,"錯誤")
end if
end
create or replace trigger gg
alter insert
on test
for each row
declare
begin
if :old.names = :new.names then
raise_replaction_err(-2003,"編碼重復");
end if
end

create or replace trigger hh
for update
on test
for each row
declare
begin
if updating then
if :old.names <> :new.names then
reaise_replaction_err(-2002,"關鍵字不能修改")
end if
end if
end

7、定義游標

declare
cursor aa is
select names,num from test;
begin
for bb in aa
loop
if bb.names = "ORACLE" then

end if
end loop;

end
8、速度優化,前一語句不後一語句的速度快幾十倍

select names,dates
from test,b
where test.names = b.names(+) and
b.names is null and
b.dates > date('2003-01-01','yyyy-mm-dd')

select names,dates
from test
where names not in ( select names
from b
where dates > to_date('2003-01-01','yyyy-mm-dd'))
9、查找重復記錄

select names,num
from test
where rowid != (select max(rowid)
from test b
where b.names = test.names and
b.num = test.num)
10、查找表TEST中時間最新的前10條記錄

select * from (select * from test order by dates desc) where rownum < 11
11、序列號的產生

create sequence row_id
minvalue 1
maxvalue 9999999999999999999999
start with 1
increment by 1
insert into test values(row_id.nextval,....)

『肆』 提問:我的 Navicat for Oracle ,寫SQL語句時,自帶的 代碼提示工具 不好用了,寫代碼時,沒有提示。

題主是不是沒有用完全限定的表名才會這樣,舉個例子吧,

select ID
from proct;
這樣子欄位ID是不會有代碼提示補全的;
只有寫:
select proct.ID
from proct;
才會有代碼提示~

又或者是軟體選項的問題,打開「工具」--「選項」--「常規」--「代碼附加選項」都打上勾看是否能解決

『伍』 sqldevelope怎麼遠程連接oracle資料庫

第一種情況:

若oracle伺服器裝在本機上,那就不多說了,連接只是用戶名和密碼的問題了。不過要注意環境變數%ORACLE_HOME%/network/admin/是否設置。

第二種情況:

本機未安裝oracle伺服器,也未安裝oracle客戶端。但是安裝了pl sql development、toad sql development、sql navigator等管理資料庫的工具。在虛擬機或者另一台電腦上安裝了oracle伺服器,也就是虛擬機或者另一台電腦此時作為伺服器。

這種情況下,本人以pl sql development遠程連接ORACLE服務端資料庫為例:

1、在安裝oracle伺服器的機器上搜索下列文件:

oci.dll
ocijdbc10.dll
ociw32.dll
orannzsbb10.dll
oraocci10.dll
oraociei10.dll
sqlnet.ora
tnsnames.ora
classes12.jar
ojdbc14.jar
把這些找到的文件復制放到一個文件夾,如 oraclient,將此文件夾復制到客戶端機器上。如放置路徑為 D:oraclient。

2、配置tnsnames.ora,修改其中的資料庫連接串。

oracledata = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521)) (CONNECT_DATA = (SERVICE_NAME = oracledata) )

其中,oracledata是要連接的服務名;HOST = 192.168.0.58,是伺服器IP地址;PORT = 1521是埠號。

3、添加第一個環境變數,名為TNS_ADMIN,值為tnsnames.ora文件所在路徑(如:D:oraclient,特別是重裝後或其它操作,忘了TNS_ADMIN變數,plsql登陸就會報無法解析指定的連接標識符),這是為了能夠找到上面說的tnsnames.ora。這步是最重要的。

添加第二個環境變數(可有可無):逗NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK地,(AMERICAN_AMERICA.US7ASCII 是ASCII編碼類型,其它類型可自己到伺服器看一下或網上查找一下)(本步驟暫時要做對,如果編碼不對,會產生亂碼)。

4、下載並安裝PL SQL Developer配置應用:

打開PL SQL Developer,登入界面點取消,進入後選擇菜單欄 tools->preferences->connection :

Oracle Home=D:oracleclient OCI library=D:oracleclientoci.dll

5、再次打開plsql則會在database中有oracledata 選項輸入用戶名密碼就可以登陸。

第三種情況:

本機未安裝ORACLE伺服器,但是安裝了oracle客戶端,也安裝了pl sql development、toad sql development、sql navigator等管理資料庫的工具。在虛擬機或者另一台電腦上安裝了oracle伺服器,也就是虛擬機或者另一台電腦此時作為伺服器。

這種情況下,本人以pl sql development遠程連接oracle服務端資料庫為例:

1、打開oracle客戶端中的net manager,配置要遠程連接的資料庫名、IP地址等,如果net manager中沒有要遠程連接的資料庫名,則新建即可。

2、其他步驟與第二種情況中的2---5相同。

第四種情況:

本機未安裝oracle伺服器,也未安裝pl sql development、toad sql development、sql navigator等管理資料庫的工具,但是安裝了oracle客戶端。在虛擬機或者另一台電腦上安裝了ORACLE伺服器,也就是虛擬機或者另一台電腦此時作為伺服器。

這種情況下,本人以oracle客戶端中的sqlplus遠程連接oracle服務端資料庫為例:

1、打開oracle客戶端中的net manager,配置要遠程連接的資料庫名、IP地址等,如果net manager中沒有要遠程連接的資料庫名,則新建即可。

2、同第二種情況中的步驟二。

3、同第二種情況中的步驟三。

4、打開sqlplus:

(1)如果用sys用戶登入,則用戶名:sys 密碼:xxxxxx 主機字元串:要連接的資料庫名 as sysdba,登入即可。

(2)如果用其他用戶登入,則用戶名:xxx 密碼:xxxxxx 主機字元串:要連接的資料庫名,登入即可。

注意事項:

1、伺服器端和客戶端防火牆需要關閉;

2、我們經常會遇到***服務無法啟動,那麼需要打開Net Configuration Assistant修復,或者新建***服務。

3、資料庫密碼如果忘了怎麼辦看按照以下方法修改密碼即可:

開始-->運行-->cmd

輸入 :sqlplus /nolog 回車

輸入 :connect / as sysdba 回車

用戶解鎖 : alter user system account unlock 回車

修改密碼:alter user system identified by manager

4、怎樣判斷資料庫是運行在歸檔模式下還是運行在非歸檔模式下看

進入dbastudio,歷程--〉資料庫---〉歸檔查看。

5、另外,如果本機和別的機子均安裝了oracle伺服器端,那麼本機如果要連接別的機子,就必須修改tnsnames.ora.

『陸』 sql server2005 建立連接伺服器時訪問介面沒有microsoft ole db provider for oracle選項

需要在「伺服器對象」——>「鏈接伺服器」——>「訪問介面」下,找到OraOLEDB.Oracle選項,單擊右鍵選擇屬性,然後在訪問介面選項下勾選「允許進程內」(Allow inprocess),即可解決上面問題,有時候,可能需要重新新建此鏈接伺服器。

『柒』 sql怎樣跨資料庫查詢oracle

假定您現在擁有一個以Microsoft.NET為架構的網路訂購系統,但是品管維護系統卻仍然使用一套舊式的Oracle資料庫應用程序。當您的顧客在產品保固期間下了產品更換之類的訂單,則該筆訂單將不收取任何費用。此時您需要從Oracle資料庫得到實時的查詢結果。借著建立連結伺服器的方式(linkedServer),您將可以從SQLServer實時查詢出位於Oracle資料庫的顧客資料,找出誰是您既有的客戶。
當您的資料分散在不同的SQLServer資料庫時,藉由連結伺服器可讓您執行跨伺服器之分布式查詢。當所有的資料庫伺服器都是SQLServer,則連結伺服器的設定十分容易,而且在SQLServer線上手冊中就涵蓋了您所需要了解的所有事項。然而,當部分資料是放在Oracle資料庫伺服器的時候,這就可能帶給您許多挑戰。舉例來說,光是設定連結伺服器就不是一件容易的事。您必須了解到:即是您要在SQLServer的EnterpriseManager設定一個Oracle連結伺服器,這台SQLServer對Oracle來說就是一個客戶端。所以您必須在SQLServer所在的伺服器成功地安裝並組態Oracle之客戶端軟體。因為Oracle提供的產品只支持Oracle8以後的資料庫,所以我假設您正在使用的都是Oracle8以後的資料庫。在OracleNet8函式庫則提供了SQLServer所需要的客戶端軟體。
設定連接伺服器時是利用Microsoft所提供的OLEDB ProviderforOracle,使用的Oracle網路函式庫為SQL*Net2.3.3.0.4或是以後的版本,不過這是Oracle7.3資料庫所提供的。換句話說,要設定Oracle資料庫為SQLServer的連接伺服器時,Oracle資料庫只要是7.3.3.4以後的版本,並搭配適當的SQL*Net或是Net8函式庫即可。
在Oracle資料庫中,一個schema即代表著SQLServer專家們所熟知的單一資料庫(譯者注2)。連接至Oracle資料庫時,您必須提供schema名稱、密碼以及主機聯機字元串(hoststring)。每一個特定的Oracle帳戶都擁有一個Oracleschema,而且只能有一個schema。所以schema名稱其實就等於該schema擁有者的帳戶名稱。您可以查詢Oracle的資料字典(Datadictionary)以得到更多有關schema的內容。
至於Oracle聯機字元串又可稱為服務名稱(servicename)或是系統識別資料(SystenIdentifier,SID)。我們所謂的SQLServer資料庫個體(instance)在Oracle則稱為資料庫(database)。所以安裝OracleServer時,安裝程序OracleUniversalInstaller(為一個圖形介面之安裝程序,與SQLServer的Setup程序類似)將會詢問您SID名稱為何,以作為Oracle資料庫之名稱。
這個部分原作者所提到schema的解釋有點問題。Oracleschema可視為同一個使用者所擁有的所有資料庫對象(schemaobjects)之集合。舉例來說,使用者scott所建立的EMPtable其完整名稱為SCOTT.EMP,而SCOTT就是EMP的schema名稱。所以schemaname其實就是一個Oracle資料庫之使用者帳號。但是絕對不能拿來跟資料庫相提並論!因為SQLServer的資料庫架構包含了datafiles與logfiles,但是Oracle的schemaobjects只存在於tablespace中。為了避免部分讀者產生混淆,特此說明。

『捌』 Oracle PL/SQL 局一中的FOR語句: 用for語句求得前100個自然數中偶數和。

mod(x,y)函數的意義是 求x除以y的余數,例如mod(5,2)=1,5除以2餘1,mod(2,2)=0, 2除以2等於1餘數是0,所以答案是0,這個程序塊就是利用這樣的求余的原理來循環判斷1-100之間的偶數,凡是能被2除盡的就是偶數。
代碼中FOR循環100次,i從100開始反向循環,99,98··以此類推到1截止退出循環。
if mod(i,2)=0 --
mod(i,2)=0的意思是i除以2無余數,如果無余數,則說明i是偶數(只有偶數除以2才能除盡)。
then s:=s+i; --
那麼變數s加上這個偶數i變成新的s,進入到下一個循環判斷,若非偶數直接進入下個循環,若為偶數s的值累加,直到循環結束,100以內所有的偶數累加成為最終的變數S。

熱點內容
歐規墨規美規中東哪個配置高 發布:2025-01-22 12:48:00 瀏覽:777
安卓機怎麼用不了多久 發布:2025-01-22 12:47:44 瀏覽:761
安卓怎麼錄屏別人直播 發布:2025-01-22 12:35:20 瀏覽:385
1030怎麼配置電腦 發布:2025-01-22 12:35:19 瀏覽:89
sql資料庫的埠 發布:2025-01-22 12:20:02 瀏覽:362
安卓最終幻想8怎麼設置中文 發布:2025-01-22 12:19:23 瀏覽:651
怎麼查電腦配置和網路 發布:2025-01-22 12:19:16 瀏覽:586
linuxsnmp查看 發布:2025-01-22 12:17:49 瀏覽:37
安卓數據線怎麼接藍牙 發布:2025-01-22 12:07:29 瀏覽:229
扣扣賬號多少次密碼不正確會被封 發布:2025-01-22 12:07:19 瀏覽:400