当前位置:首页 » 编程语言 » 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。

热点内容
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
python是32位还是64位 发布:2025-01-22 11:51:41 浏览:894
铃声多多缓存文件夹 发布:2025-01-22 11:51:39 浏览:724
java按键精灵 发布:2025-01-22 11:49:31 浏览:81
python配色 发布:2025-01-22 11:46:40 浏览:613