标签: sqlplus

为什么sqlplus没有连接?

我的目标是从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变量? …

oracle macos sqlplus ora-12170

7
推荐指数
1
解决办法
8万
查看次数

Linux下的SQL*Plus历史记录

如何在Linux中使用sqlplus来维护我的查询历史记录?这样我就可以使用向上/向下箭头来获取我之前的查询.

linux history sqlplus

7
推荐指数
1
解决办法
5127
查看次数

如何将序列中的下一个值转换为变量?

所以我正在编写一个存储过程,并且无法将序列的下一个值转换为变量.

序列名称传递给函数并存储为varchar2变量.如何将该序列中的下一个值转换为局部变量.

oracle sequences sqlplus

7
推荐指数
1
解决办法
2万
查看次数

让SQLPlus假脱机输出Unicode字符,输出为?

我试图让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本身设置的设置或开关吗?任何想法将不胜感激.

oracle sqlplus utf-8 oracle10g

7
推荐指数
1
解决办法
2万
查看次数

PLSQL Procudure(Oracle)比较where子句中的变量

这真让我抓狂.我想对列和变量进行简单的比较,但它不起作用.以下行总是计算所有元组,而我只需要那些由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)

mysql sql database oracle sqlplus

7
推荐指数
1
解决办法
704
查看次数

sqlplus打印运行语句

有没有办法让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)

oracle sqlplus

7
推荐指数
1
解决办法
2万
查看次数

获取SQL Plus以显示更详细的错误

安装我的应用程序时,用户必须启动SQL Plus并运行SQL脚本.该脚本包含创建许多表和许多PL/SQL函数和触发器等.

目前,某些功能在脚本中的顺序错误,因此用户当前会看到一些"使用编译错误创建的触发器"类型的消息.我相信这是因为函数/触发器依赖于其他函数,这意味着它们无法正确编译.

我想要做的是找出哪些是失败的,具体的编译错误是什么,而不是我现在得到的相当模糊的警告.这样我可以重新安排我的安装脚本中的功能,不再收到警告!

UPDATE

我还希望将特定错误记录到文件中.目前我正在使用SPOOL命令来记录事物,所以如果错误也可以被"假脱机",那将会很棒.

oracle plsql sqlplus

7
推荐指数
2
解决办法
1万
查看次数

在XP XP SP3上,SQLPLUS无法使用oracle即时客户端运行

我有一台计算机充当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)

有谁能够帮我?

oracle sqlplus oracle-call-interface oracle11g

7
推荐指数
1
解决办法
4843
查看次数

Oracle 12c对密码限制的双重报价

我已经能够使用双引号成功地使用我的密码上的任何字符,例如:

alter user example identified by "weird/@#&'pass\\";
Run Code Online (Sandbox Code Playgroud)

我没有遇到任何特殊例外的问题,甚至/ 0 \和我在工作之前看到的其他特殊情况,但是,我不能在我的密码(")中使用双引号,我已经尝试过转义字符了没有成功.

我看到对Oracle Reference没有任何限制,所以有没有办法使用双引号或者这是一个没有文档的限制?

oracle sqlplus

7
推荐指数
1
解决办法
3774
查看次数

SQL*Plus - 数字列显示十六进制字符

在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开发人员中不会发生.有人有解释吗?似乎没有解决方法,除了重命名..

sql oracle sqlplus

7
推荐指数
1
解决办法
149
查看次数