I want to connect to an oracle database located on another host using sqlplus. This page suggested adding an item on my tnsnames to conenct to that database
local_SID =
(DESCRIPTION =
(ADDRESS = (PROTOCOL= TCP)(Host= hostname.network)(Port= 1521))
(CONNECT_DATA = (SID = remote_SID))
)
Run Code Online (Sandbox Code Playgroud)
and then use that in sqlplus
sqlplus user/pass@local_SID
Run Code Online (Sandbox Code Playgroud)
However, in my circumstances modifying the local tnsnames is not possible. Is it possible to connect to a remote database just by using sqlplus argument without having to …
我有一张有 100 列的表格。在SQL Plus输出换行中选择数据时,使其难以阅读。
我更喜欢的是出现一个水平滚动条,或者以某种方式将输出发送到 less
我在 SQLPlus 中运行以下语句 -
SET LINESIZE 32000;
SET PAGESIZE 40000;
SET LONG 50000;
SPOOL output.txt
SELECT * FROM big_table;
Run Code Online (Sandbox Code Playgroud)
然后在bash我跑 -
少输出.txt
输出仍然显示为已包装且不可读。
假设我有一个 Oracle 数据库。我有一个用户名 = x,密码 = y,数据库 = z。我也知道端口 = a,SID = b,主机名 = c。
那么我需要如何正确连接呢?我使用了许多选项,例如:
sqlplus x/y@'(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=c)(PORT=a))(CONNECT_DATA=(SID=z)(SERVER=DEDICATED)))'
sqlplus (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=c)(PORT=a))(CONNECT_DATA=(SID=b)))
Run Code Online (Sandbox Code Playgroud)
提交这些命令行通常会给我返回错误消息,例如:
ORA-12560:TNS:协议适配器错误
ORA-12514:TNS:侦听器当前不知道服务
提前谢谢了!!
我发现sqlplus'界面已经过时了。有一些命令或关键字可供使用是非常好的,但例如没有可用的前一个历史条目的“向上箭头”键。
什么是好的替代品/扩展sqlplus?可能是 GUI 或更好的(因此它通过 SSH 保持有用)命令行实用程序。
SQL*Plus是用于操作 Oracle 数据库的主要命令行工具。
一些语句,如 create table、insert into 等,在末尾使用分号:
CREATE TABLE employees_demo
( employee_id NUMBER(6)
, first_name VARCHAR2(20)
, last_name VARCHAR2(25)
CONSTRAINT emp_last_name_nn_demo NOT NULL
) ;
Run Code Online (Sandbox Code Playgroud)
而其他人喜欢
set echo on
connect system/manager
Run Code Online (Sandbox Code Playgroud)
也不要分号。
这背后的原因是什么?我如何决定自己在哪里放分号,在哪里不放?
我知道这个问题可能听起来太愚蠢了,但我从来没有理解这部分。
SQL*Plus 适用于 SQL 和 PL/SQL。我如何知道某些代码是 SQL 还是 PL/SQL?如果我的代码有 for 循环,它就不再是 SQL 了吗?
PL/SQL 是 SQL 的扩展,具有循环、条件等。那么任何 SQL 代码默认都是 PL/SQL 代码?不是这样吗?
SQL 和 PL/SQL 之间有分界线吗?
区分触发此问题的黑白 SQL 和 PL/SQL 的两个示例:
在 SQL*Plus 提示符下,Rem和 都--可以作为注释指示符:
Rem this is a comment
-- this is also a comment
create table emp (
id number primary key,
name cvarchar2(40));
Run Code Online (Sandbox Code Playgroud)
这两种评论技术有什么区别吗?
有时我会得到一个可以在 SQL Developer 或 Toad 中正常运行的脚本,但需要修改才能从 SQL*Plus 中成功运行。这是一个最坏的例子,其中包含多个语句,每个语句都带有空行、分号和正斜杠:
INSERT INTO t1 VALUES ('a
;
/
');
INSERT INTO t1 VALUES ('b
;
/
');
DELETE FROM t1 WHERE c1 = 'c
;
/
';
Run Code Online (Sandbox Code Playgroud)
由于各种原因,这些语句需要从 SQL*Plus 运行。空行很容易用一个简单的...
set sqlblanklines on
Run Code Online (Sandbox Code Playgroud)
我知道 sqlterminator可以更改和/或关闭,但两者都需要修改代码,前者移动问题而不解决它,也不能解决嵌入的斜杠问题。
最好的答案是通过以某种方式改变环境(如 sqlblanklines 所做的),允许这些语句在不修改的情况下运行。如果这是不可能的,那么也许有一种方法可以以编程方式修改脚本。我试图避免手动更改。
我只是遇到了问题,我定义了一个类型并在 TOAD 中对其进行了测试,一切正常。但是在 SQL*PLUS 下运行它抛出了一个错误。
例子:
CREATE OR REPLACE TYPE MyType AS OBJECT (
Item1 NUMBER,
Item2 NUMBER
);
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我必须在这里添加斜线
CREATE OR REPLACE TYPE MyType AS OBJECT (
Item1 NUMBER,
Item2 NUMBER
);
/
Run Code Online (Sandbox Code Playgroud)
对我来说,它看起来类似于不需要斜线的 Create Table 语句。我觉得比较混乱。我知道它是如何工作的,但谁能解释为什么做出这个设计决定?
我在 Oracle 中创建了一些新用户。但是,在运行sqlplus时,它们都需要完全限定查询中的表名。为这些新用户设置默认架构的最佳方法是什么?