我的目标是从OS X机器连接到Oracle 9i实例.我按照这里的设置说明进行了操作,没有错误(最终).但是,我发现sqlplus无法连接:
[ ethan@gir ~ ]$ sqlplus xxx/yyy@zzz
SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009
Copyright (c) 1982, 2007, Oracle. All Rights Reserved.
Run Code Online (Sandbox Code Playgroud)
Looooong等待......
ERROR:
ORA-12170: TNS:Connect timeout occurred
Enter user-name: xxx
Enter password:
ERROR:
ORA-12162: TNS:net service name is incorrectly specified
Enter user-name:
Run Code Online (Sandbox Code Playgroud)
我的tnsnames.ora档案......
zzz =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = dbhost)
(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = zzz)
)
)
Run Code Online (Sandbox Code Playgroud)
也许有一个需要设置的env变量? …
如何在Linux中使用sqlplus来维护我的查询历史记录?这样我就可以使用向上/向下箭头来获取我之前的查询.
所以我正在编写一个存储过程,并且无法将序列的下一个值转换为变量.
序列名称传递给函数并存储为varchar2变量.如何将该序列中的下一个值转换为局部变量.
我试图让Oracle sqlplus(10.2)在Linux机器上移出Unicode数据.我找到了几个关于这个问题的讨论,但没有明确的答案,除了检查区域设置并将NLS_LANG设置为AL32UTF8.所有语言环境信息都设置为"en_US.UTF-8",我会根据请求发布完整输出.
操作系统(vi等)将识别并接受Unicode字符而不会出现问题.但是,使用sqlplus时,所有非ASCII字符都更改为?字符.Oracle DB将NLS_CHARACTERSET设置为AL32UTF8,将NLS_NCHAR_CHARACTERSET设置为AL16UTF16.
我错过了一些需要为sqlplus本身设置的设置或开关吗?任何想法将不胜感激.
这真让我抓狂.我想对列和变量进行简单的比较,但它不起作用.以下行总是计算所有元组,而我只需要那些由where子句条件限制的元组.
SELECT count(*) INTO cnt from class where class.fid = fid;
Run Code Online (Sandbox Code Playgroud)
它看起来很简单,但我已经在这个工作了几个小时.完整的sql proc是
令人困惑的是,如果我用一些硬编码ID(如105)替换fid,它会给出一个正确的答案),但是当我使用fid时它就不再起作用了,并返回所有类的计数.由于某种原因,总是class.fid = fid.当我使用>,<或<>时,返回0计数!
create or replace PROCEDURE pro_report2
AS
CURSOR c_dept IS select deptid, dname from department;
TYPE cur_typ IS REF CURSOR;
c1 cur_typ;
query_str1 VARCHAR2(200);
fid faculty.fid%type := 102;
fname faculty.fname%type;
cnt NUMBER;
BEGIN
FOR dept_row in c_dept LOOP
DBMS_OUTPUT.PUT_LINE('Dept.Name: ' || dept_row.dname);
DBMS_OUTPUT.PUT_LINE('Faculty Name' || chr(9)|| chr(9) || '0 Class' || chr(9) || chr(9) || '1 Class' || chr(9) || chr(9) || '2 Classes' || …Run Code Online (Sandbox Code Playgroud) 有没有办法让sqlplus可以打印它执行的语句.我的意思是我有一些我在bash脚本中运行的.sql文件.我需要知道什么时候我读取日志文件sqlplus运行的语句.
示例:假设我有这个test.sql文件:
set timing on
create table foo (a varchar2(10));
create table bar (b varchar2(10));
exit
Run Code Online (Sandbox Code Playgroud)
当我检查日志时,我得到了这个:
Table created.
Elapsed: 00:00:00.02
Table created.
Elapsed: 00:00:00.01
Run Code Online (Sandbox Code Playgroud)
哪个不提供信息.有没有办法让我得到这样的输出:
Table foo created.
Elapsed: 00:00:00.02
Table bar created.
Elapsed: 00:00:00.01
Run Code Online (Sandbox Code Playgroud)
或者甚至像这样:
create table foo (a varchar2(10));
Table created.
Elapsed: 00:00:00.02
create table bar (b varchar2(10));
Table created.
Elapsed: 00:00:00.01
Run Code Online (Sandbox Code Playgroud)
我知道我可以在每个语句之前使用PROMPT,但是我有大的sql脚本,在每个语句之前编写PROMPT会很繁琐.
编辑:
对于Allan的解决方案始终工作(即使用" set echo on "),您应该避免以下情况:
1)不要在sqlplus中使用-S选项,因为这会抑制命令回显的显示.
2)不要将你的脚本"cat"到sqlplus,如下所示:
cat test.sql | sqlplus scott/tiger@orcl
Run Code Online (Sandbox Code Playgroud) 安装我的应用程序时,用户必须启动SQL Plus并运行SQL脚本.该脚本包含创建许多表和许多PL/SQL函数和触发器等.
目前,某些功能在脚本中的顺序错误,因此用户当前会看到一些"使用编译错误创建的触发器"类型的消息.我相信这是因为函数/触发器依赖于其他函数,这意味着它们无法正确编译.
我想要做的是找出哪些是失败的,具体的编译错误是什么,而不是我现在得到的相当模糊的警告.这样我可以重新安排我的安装脚本中的功能,不再收到警告!
我还希望将特定错误记录到文件中.目前我正在使用SPOOL命令来记录事物,所以如果错误也可以被"假脱机",那将会很棒.
我有一台计算机充当Oracle数据库11g企业版的服务器.我想使用另一台计算机,一台运行Windows XP SP3的PC作为此服务器的客户端.
所以我决定在客户端PC上安装Oracle Instant Client 11.2.0.4.0.我从Oracle OTN下载了压缩文件并将其解压缩到文件夹中c:\oracle\instantclient11.2.0.4.0.然后我将此路径添加到系统路径变量,并创建了另一个名为TNS_ADMIN变量名的系统变量,其中Oracle Instant Client具有相同的路径c:\oracle\instantclient11.2.0.4.0.
最后我从服务器pc复制了tnsnames.ora.
所以我想尝试从cmd.exe运行sqlplus,但错误是:
The procedure entry point OCIBindByName2 could not be located in the dynamic link library OCI.dll .
Run Code Online (Sandbox Code Playgroud)
有谁能够帮我?
我已经能够使用双引号成功地使用我的密码上的任何字符,例如:
alter user example identified by "weird/@#&'pass\\";
Run Code Online (Sandbox Code Playgroud)
我没有遇到任何特殊例外的问题,甚至/ 0 \和我在工作之前看到的其他特殊情况,但是,我不能在我的密码(")中使用双引号,我已经尝试过转义字符了没有成功.
我看到对Oracle Reference没有任何限制,所以有没有办法使用双引号或者这是一个没有文档的限制?
在SQL*Plus中进行数据透视报告,计算状态为"ERROR"的记录数,并在结果中遇到十六进制值.它可以使用以下内容在11g上复制:
SQL> select 1 error from dual;
ERROR
----------
##########
Run Code Online (Sandbox Code Playgroud)
然后我测试了几种:
SQL> select 1 errors from dual;
ERRORS
----------
1
SQL> select 'a' error from dual;
ERROR
-----------------------------------------------------------------
a
SQL> select 'a' errors from dual;
E
-
a
Run Code Online (Sandbox Code Playgroud)
看起来像有一个名为'error'的列会对SQL*Plus中的结果产生奇怪的影响,因为这个问题在SQL开发人员中不会发生.有人有解释吗?似乎没有解决方法,除了重命名..