◎筱米加步枪◎.Blog

Happy coding

PL/SQL相关方便性设置

PL/SQL的一些方便性技巧列举如下:

1.写好的SQL代码转成自定义格式的JAVA(或其他)代码,可减少手工拼凑的重复工作。例如:

A.创建文件Java_Query.copy的文件,在文件中贴上如下代码:

;PL/SQL Developer SpecialCopy definition
;<LINE_1> for first line
;<LINE_*> for all other lines
;<LINE_N> for last line
;
#define " = \"
#define \ = \\
#define char(9) = \t
StringBuilder sql = new StringBuilder();
sql.setLength(0);
sql.append("<line_1>");
sql.append("<line_*>");
sql.append("<line_n>");

B.将文件拷贝到%PLSQL_STEUP_PATH%/SpecialCopy

C.在PLSQL中讲写好的SQL语句选中,[右键]>>[Special Copy]>>[Java_Query],如图:

D.按CTRL+V(复制)就可以看到结果了,可以把相关代码复制到程序中即可.

2.自动替换,快速输出查询、更新等语句.

A.选择PL/SQL菜单[Tools]>>[Preferences..],如图设置:

B.这样,在PL/SQL中输入S+空格,则可以出现SELECT T.*,T.ROWID FROM ,方便开发调试,减少打字时间.

运行sqlplus 报"SP2-1503:无法初始化 Oracle 调用界面"解决方法

在Win7下运行sqlplus报如下错误

SP2-1503: 无法初始化 Oracle 调用界面

SP2-0152: ORACLE 不能正常工作     

百度之得方法:

找到Oracle安装目录中BIN目录下sqlplus.exe。右键>>属性>>兼容性>>选中以管理员身份运行>>确认即可。

如图:

64位Windows7下安装Oralce10g客户端过程.

本想尝试在不安装客户端的情况下使用PLSQL访问数据库服务器 .但是后来还是失败了.

于是在Windows7(64位)下安装了Oracle10g的客户端后,使用PLSQL尝试连接,总提示一个空白框.很无奈.百度谷歌了许久才找到解决方法.

摘自网上的:

1.到oracle官网下载Oracle InstantClient,我下的是instantclient-basiclite-win32-10.2.0.4.zip,把它解压缩到oracle安装目录product下,其中还有一个目录为10.2.0.在其中的db_1/NETWORK/ADMIN目录下拷贝tnsnames.ora文件到InstantClient解压目录.
2.非登录状态下进入PL/SQL developer,进入首选项,在connection中设置Oracle_Home和OCI Library,其中Oracle_Home设置为InstantClient的解压目录,OCI Library设置为该目录下的oci.dll.

最后设置环境变量:

set path=instantclient的路径
set TNS_ADMIN=tnsnames.ora文件的目录

使用PLSQL尝试登录,成功.

PS:如果出现ORA-12705:无法访问NLS数据文件,或者指定的环境无效错误,把环境变量中NLS_LANG的变量删除掉

有关Oracle中的Blob字段更新问题

先说下偶遇到的问题:

Oracle中我使用Blob字段来存一个Xml内容.新增一条记录正常,但是尝试用一条记录去更新已经存在的记录.

发现Blob中的字段中的内容并没有被更新掉.


网络上的一些朋友说原因如下:

假设Blob字段中已经存在的内容是100个字节,那么尝试用50字节的内容去更新,

那么得到的结果就是:前面50个字节被覆盖,而Blob仍然存在100个字节,其中后面50个字节是原先的后50个字节.


那么解决的方法如下:(证实可以通过)

先清空原Blob字段中的数据,再进行字节的写入.(与平常的更新操作会多了一步).

具体的更新方法如下:

UPDATE 表名 SET BLOB字段=EMPTY_BLOB() WHERE 条件.

然后再执行具体的更新SQL语句.

ORA-01034 ORACLE not available ORA-27101 Shared memory realm does not exist错误解决方案.

解决好创建实例问题之后,使用PL/SQL连数据库报如下错误:

ORA-27101 Shared memory realm does not exist
ORA-01034 ORACLE not available 

谷歌了很久很久,才找到解决方案,网上大多数方案都不行.很佩服这个牛人.

偶不是Oracle专家,不说原因了..直接说明怎么解决问题的吧.

1.打开命令窗口输入:lsnrctl start

2.出现监听程序启动成功之后,继续输入: sqlplus '/as sysdba'

3.连接成功后输入startup

4.出现成功信息后再使用PL/SQL登录,发现登录成功.

贴个截图:

Oracle服务误删除的解决办法(360搞的)

之前有一次遇到这个问题,ORACLE.exe莫名奇妙的被360给删除了,上次选择了还原系统来解决,这次不知何时又被删除了.害我搞了一个晚上

无奈之下只好百度谷歌到处搜索.搜索到如下命令可建Oracle实例.(可弄成一个bat文件)

oradim -NEW -SID orcl -STARTMODE manual -PFILE F:\oracle\product\10.2.0\admin\ORCL\pfile\initorcl.ora"  
oradim -STARTUP -SID ORCL -STARTTYPE inst

其中红色部分为自己的Oracle实例.

顺便贴个删除Oracle实例的命令:

oradim -DELETE -SID orcl

完成之后重启便可.

若登录数据库时出现如下错误 :

ora-01034:oracle not available

ora-27101:shared mermory realm does not exist

请看文章:http://cst.is-programmer.com/posts/23753

Oracle出现ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务解决方法

遇到此问题多次了,于是决定记一下.

找到listener.ora文件打开,

# listener.ora Network Configuration File: f:\oracle\product\10.2.0\db_1\network\admin\listener.ora
# Generated by Oracle configuration tools.

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = f:\oracle\product\10.2.0\db_1)
      (PROGRAM = extproc)
    )
      (SID_DESC =
        (GLOBAL_DBNAME = ORCL)
        (ORACLE_HOME = f:\oracle\product\10.2.0\db_1)  
        (SID_NAME = ORCL)
    )

  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

上面红色标记部分为增加的部分,根据具体数据库安装的不同,分别更改GLOBAL_DBNAME、ORACLE_HOME、SID_NAME三个值,然后重新启动Oracle服务即可

Oracle split函数的用法

split函数故名思意就是用来分割字符串。做了个简单的实验:

看SQL语句:

Select * From Table (Split('1#2#3#4','#'))

得到的结果如下:

若想要把分割出来的记录与其他相关表进行关联查询,使用这张表与其他表进行关联即可。

Oracle Number的精度问题

今天写建表的脚本时,设置数据类型为Number(2,2),以为前面的这个参数是代表整数的位数,后面的参数是代表整数的未数,结果报出“精度错误”的问题,百度得到:

原来Number(P,S)是代表总共P位数,其中小数有S位

卸载Oracle10g步骤

很郁闷的不知道为啥的装Oracle10g就出错了,无法创建实例等问题。于是就想到先卸载,但是之前听说Oracle的卸载异常麻烦,之前是用9i的,听过如果第一次装失败,基本上要重装系统了。不过今天百度了下,并且按照里面的做了,接着再装Oracle就可以了,于是记录下具体卸载方法:(摘自网上)

    0、开始->设置->控制面板->添加删除程序-> Oracle Data Provider for .Net Help
    1、开始->设置->控制面板->管理工具->服务停止所有Oracle服务;
    2、开始->程序->Oracle – OraDb10g_home1>Oracle Installation Products-> Universal Installer 卸装所有Oracle产品,但Universal Installer本身不能被删除;
    3、运行regedit,选择HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del键删除这个入口;
    4、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滚动这个列表,删除所有Oracle入口;
    5、运行regedit,选择HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,删除所有Oracle入口;
    6、开始->设置->控制面板->系统->高级->环境变量,删除环境变量CLASSPATH和PATH中有关Oracle的设定;
    7、从桌面上、STARTUP(启动)组、程序菜单中,删除所有有关Oracle的组和图标;
    8、删除c:\Program Files\Oracle目录;
    9、重新启动计算机,重起后才能完全删除Oracle所在目录 ;
    10、删除与Oracle有关的文件,选择Oracle所在的缺省目录C:\Oracle,删除这个入口目录及所有子目录,并从Windows XP目录(一般为d:\WINDOWS)下删除以下文件ORACLE.INI、oradim73.INI、oradim80.INI、oraodbc.ini等等;
    11、WIN.INI文件中若有[ORACLE]的标记段,删除该段;
    12、如有必要,删除所有Oracle相关的ODBC的DSN(管理工具/数据源(ODBC));
    13、到事件查看器(管理工具/事件查看器)中,删除Oracle相关的日志(只能删除所有,右击某个目录,清除所有事件)

其中有很多步我都没用到,可能是因为刚刚装完的缘故吧。还没产生其他垃圾数据和文件。