装了Oracle 10g后,在命令行输入sqlplus as\sysdba后提示:无法初始化Oracle调用界面;Oracle不能正常工作

小伙伴们在命令行输入“sqlplus assysdba”时遇到错误了吧?别急,小编来帮你解决一下。
首先,命令格式要正确哦,应该是“sqlplus/assysdba”或者“sqlplus 用户名/密码 assysdba”,注意“assysdba”之间要加个空格哦。

另外,登录时记得要用管理员权限,如果你不是以管理员身份登录,可以切换到管理员用户执行,或者按照以下步骤给普通用户赋予权限:进入控制面板,找到“管理工具”,点击“本地安全策略”,然后是“本地策略”下的“用户权限分配”,找到“创建全局对象”,双击后添加需要的用户或组,保存设置,注销后重新登录。

检查一下Oracle服务状态也很关键,命令行里输入“lsnrctl status”看看Oracle监听器状态。
如果看到状态为READY的例程,比如“服务'PLSExtProc'包含1 个例程...”,那就表示Oracle服务启动正常了。
如果没启动,记得启动它哦。

按照这些步骤试试,问题应该就能解决了。
如果还是不行,那就去查查Oracle的安装日志和错误日志,它们可能会给你更多线索。
加油,小伙伴们!

python调用oracle的sql中wm_concat问题:

在Python中调用sqlplus来获取Oracle查询结果的示例代码如下:
python import os import sys from subprocess import Popen, PIPE
sql = """ set linesize 4 00 col owner for a1 0 col object_name for a3 0 select owner, object_name from dba_objects where rownum <= 1 0; """
proc = Popen(["sqlplus", "-S", "/", "as", "sysdba"], stdout=PIPE, stdin=PIPE, stderr=PIPE) proc.stdin.write(sql) (out, err) = proc.communicate()
if proc.returncode != 0: print(err) sys.exit(proc.returncode) else: print(out)
在Python中查询Oracle数据库,首选的方法是使用cx_Oracle库,但在某些情况下,由于种种限制无法安装第三方库,我们只能利用现有资源来解决问题。
在这种情况下,我们可以使用Python调用SqlPlus来查询Oracle数据库。

首先,我们需要了解SqlPlus返回的结果格式是什么样的。
一般情况下,结果的第一行是空行,第二行是字段名称,第三行是一系列横杠作为分隔,第四行开始才是实际的查询结果。

在查询结果格式规整的情况下,我们可以根据第三行的内容清晰地了解结果的结构,从而方便地使用Python进行解析。
但如果查询的表字段非常多,记录数也很大,那么默认情况下使用SqlPlus查询出的结果可能会比较混乱。
为了解决这个问题,我们可以在调用查询之前设置一些参数,比如:
sql set linesize 3 2 7 6 7 set pagesize 9 9 9 9 set term off verify off feedback off tab off set numwidth 4 0
这样设置后,查询结果就会更加规整,便于我们使用Python进行解析。

接下来,我们可以编写一个函数,根据传入的SQL语句来查询并解析结果。
这个函数会将每一行的结果存储到一个列表中,列表中的每个元素都是一个字段名称与值的映射。

python def parseQueryResult(listQueryResult): listResult = [] if len(listQueryResult) < 4> listStrTmp = listQueryResult[2 ].split() listIntWidth = [len(oneStr) for oneStr in listStrTmp]
listStrFieldName = [] iLastIndex = 0 lineFieldNames = listQueryResult[1 ] for iWidth in listIntWidth: strFieldName = lineFieldNames[iLastIndex:iLastIndex + iWidth] strFieldName = strFieldName.strip() listStrFieldName.append(strFieldName) iLastIndex += iWidth + 1
for i in range(3 , len(listQueryResult)): oneLineResult = unicode(listQueryResult[i], 'UTF-8 ') fieldMap = {} iLastIndex = 0 for j in range(len(listIntWidth)): strFieldValue = oneLineResult[iLastIndex:iLastIndex + listIntWidth[j]] strFieldValue = strFieldValue.strip() fieldMap[listStrFieldName[j]] = strFieldValue iLastIndex += listIntWidth[j] + 1 listResult.append(fieldMap)
return listResult
在这个函数中,我们首先检查查询结果是否为空。
然后,我们解析第二行来获取每列的宽度,并解析第一行来获取字段名称。
最后,我们从第三行开始解析每一行的结果,并将其存储到列表中。

我们还可以编写一个函数来构造查询命令,并调用系统命令来收集结果:
python def QueryBySqlPlus(sqlCommand): global gStrConnection strCommand = 'sqlplus -S %s <<< !\n' % gStrConnection strCommand += 'set linesize 3 2 7 6 7 \n' strCommand += 'set pagesize 9 9 9 9 \n' strCommand += 'set term off verify off feedback off tab off\n' strCommand += 'set numwidth 4 0\n' strCommand += sqlCommand + '\n'
result = os.popen(strCommand) list = [] for line in result: list.append(line) return parseQueryResult(list)
在这个函数中,我们首先构造查询命令,并设置了一些参数来确保结果的规整性。
然后,我们调用系统命令来收集结果,并使用之前编写的parseQueryResult函数来解析结果。

最后,我们可以使用以下代码来调用QueryBySqlPlus函数,并打印出查询结果:
python listResult = QueryBySqlPlus('select from studentinfo') for item in listResult: print(item)
这样,我们就可以使用Python调用SqlPlus来查询Oracle数据库,并解析查询结果了。

如何在sqlplus执行sql文件

说到在SQLPlus里跑SQL脚本,这可是个家常便饭的操作了。
咱们假设有个叫test.sql的脚本文件放在D盘的script目录下,执行起来也挺简单。
在SQLPlus的提示符后面敲上这条命令:sqlplus> @D:\script\test.sql。
这个命令里的"@"符号就是SQLPlus的专属标识,告诉它后面跟着的是个文件路径,它会乖乖地去读那个文件,然后把里面的SQL语句一条条跑起来。

要是咱们在Linux系统上操作,虽然路径的分隔符用斜杠"/"而不是Windows的"\", 但执行SQL脚本的基本思路还是一样的。
比如,如果脚本文件放在/home/user/script目录下,那命令大概是这样:sqlplus> @/home/user/script/test.sql。
Linux系统里,路径是不分大小写的,但文件名可认认真真地区分大小写。

当然,在执行之前,得确保SQLPlus已经装好了,而且得能找到咱们的脚本文件。
万一文件路径里头有啥空格或者特殊字符,那得用引号或者转义字符给保护起来,不然容易出错。

而且啊,执行SQL脚本的时候,还能跟其他SQLPlus的命令搭着用,让操作更溜。
比如,用"spool"命令把输出的东西都保存到文件里,或者用"set serveroutput on"让PL/SQL块的输出显示出来。

总的来说,就靠着这个简单的"@"符号和文件路径,咱们就能在SQLPlus里轻松执行SQL脚本,把一大堆SQL语句给批量搞定,是不是挺方便的?

请教sqlplus的格式化输出

哈喽大家好,今天要跟大家分享的是关于配置环境脚本的一些小知识。
咱们一步一步来看。

首先,我们要进入$ORACLE_HOME/sqlplus/admin目录,然后运行viglogin.sql这个脚本。

接下来,咱们要对一些参数进行设置:
1 . define_editor=vi:这个是用来设置sqlplus使用的默认编辑器。
你可以把它设置成你喜欢的文本编辑器,比如记事本或者emacs。
2 . setserveroutputonsize1 000000:这个命令会默认打开dbms_output,这样你就不必每次都输入这个命令了。
同时,它还会将默认缓冲区大小设置得尽可能大。
3 . settrimspoolon:这个命令会在假脱机输出文本时去除文本行两端的空格,而且行宽不定。
如果设置为OFF(默认设置),假脱机输出的文本行宽度则等于所设置的LINESIZE。
4 . setlong5 000:这个命令用来设置选对LONG或CLOB列时显示的默认字节数。
5 . linesize1 000:这个命令用来设置sqlplus显示的文本宽为1 000字符。
6 . setpagesize9 9 9 9 :pagesize可以控制sqlplus多久打印一次标题,这里将pagesize设置为一个很大的数,所以每页只有一组标题。
7 . columnplan_plus_expformata8 0:这个命令用来设置由autotrace得出的解释计划输出(explainplanoutput)的默认宽度。
A8 0通常足以放下整个计划。
8 . settermouton/off:这个命令是用来控制@方式执行之返回的。
9 . definegname=idle:这个命令定义一个变量gname,值为idle。
1 0. columnglobal_namenew_valuegname:这个命令告诉sqlplus取得global_name列中的最后一个值,并将这个值赋给替换变量gname。
1 1 . selectlower(user)||'@'||substr(global_name,1 ,decode(dot,0,length(global_name),dot-1 ))global_namefrom(selectglobal_name,instr(global_name,'.')dotfromglobal_name);:这个命令用来取得global_name的值。
1 2 . setsqlprompt'&gname>':这个命令通常用来设置SQL提示符的方法。

以上就是我对这些脚本的一些说明,希望对大家有所帮助。
如果大家有任何问题,欢迎留言讨论。

sqlplus脚本@备注的注意事项

嗨小伙伴们,今天来跟大家聊聊在使用sqlplus脚本时需要注意的一些小细节,特别是关于那个神奇的@符号和那些让人头疼的备注问题。
首先得说说脚本编辑器怎么选,新建脚本时,别急着用那些热门的编辑器,比如notepad++,它们有时候会搞出中文乱码,闹心不?所以,老老实实用电脑右键新建个文本文档,记得改个.sql的扩展名,这样才安全。

然后是DDL操作语句的格式问题,比如create、truncate这些操作,在sqlplus里执行时要注意格式哦。
有时候,你会发现,在plsql里顺畅执行的语句,在sqlplus里就闹起了别扭,比如表被截断的提示。
这时候,试试在sqlplus里用execute immediate,记得用begin和end把整个语句块包起来,说不定就能解决问题。

说到字段值,记得别让它们有空行,这样执行时可能会出错。
还有,字段值里别出现以@开头的字符,这货在sqlplus里有特殊用途,要是用错了,脚本解析起来可就头疼了。

最后得提一下用@符号执行脚本时的参数传递。
在sqlplus里,@符号能帮你运行外部脚本,还能传参数。
参数间要用空格隔开,脚本里用&1 、&2 这样的变量来接收,这样脚本执行起来就灵活多了。

好啦,以上就是关于sqlplus脚本中@符号和备注的一些要点。
记住这些小技巧,你的sqlplus操作一定会更加得心应手!