我有一大组带有 SQL 命令的文件,我使用使用该@@运算符的 SQL*Plus 脚本运行这些文件。我在第三方计算机上运行该脚本(甚至通过电子邮件发送),因此我想使其尽可能独立。
文件编码为 Win-1252。目前,我需要NLS_LANG在运行脚本之前设置环境变量:
C:\> SET NLS_LANG=SPANISH_SPAIN.WE8MSWIN1252
C:\> echo exit | sqlplus foo/bar@//example.com/xe @install.sql
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道是否可以使用 SQL 或 SQL*Plus 命令更改客户端编码。(或者至少读取值并在不匹配时中止执行。)
是否可以在创建时指定用户的 user_id?
SQL> create user user1 identified by user1;
User created.
SQL> select user_id, username from all_users where username='USER1';
USER_ID USERNAME
---------- ------------------------------
72 USER1
SQL>
Run Code Online (Sandbox Code Playgroud)
它可以是我指定的数字而不是 72 吗?
我正在使用多个 .sql 调用的 sql 文件部署 pl/sql 代码@@file。如果包出现编译错误,脚本会继续执行到最后。
有没有办法停止每个编译错误?
我试过了,WHENEVER SQLERROR EXIT SQL.SQLCODE但脚本仍在继续。
给定的 Oracle 查询通过替换变量将数据插入表中。我如何在 PostgreSQL 中实现相同的目标?
INSERT INTO control_threshold (
threshold_id, group_name, description, sql, low_value, high_value)
VALUES(
threshold_seq.nextval, '&2', '&1', TRIM('&5' || '&6' || '&7' || '&8' || '&9'),
trim('&3'), trim('&4'));
Run Code Online (Sandbox Code Playgroud) 我在我的 Mac 上的 Centos VM 上安装了 11g。我已经准备好一切并在服务器上工作。我已经包含了我在 cenos 上运行的以下命令。
$lsnrctl 状态
LSNRCTL for Linux: Version 11.2.0.1.0 - Production on 23-JUN-2014 14:49:41
Copyright (c) 1991, 2009, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=hayer)(PORT=1522)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 11.2.0.1.0 - Production
Start Date 23-JUN-2014 14:03:58
Uptime 0 days 0 hr. 45 min. 42 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
Listener Log File /u01/app/oracle/diag/tnslsnr/hayer/listener/alert/log.xml
Listening Endpoints …Run Code Online (Sandbox Code Playgroud) 我从 postgresql 来到 oracle。在 postgresql 中,我可以使用命令行工具 psql 在事务中执行删除或更新:
dbpool.production=> begin;
BEGIN
dbpool.production=*> delete from foo where account_id like '%1000%';
DELETE 9
dbpool.production=*> commit;
COMMIT
dbpool.production=>
Run Code Online (Sandbox Code Playgroud)
我喜欢在提交事务之前看到我得到了预期的计数。
在 sqlplus(Oracle 命令行工具)中,事情并非如此。当我输入“开始;”时,它只是开始读取更多的输入,从不明显地做任何事情:
SQL> begin;
2 update opacs_work_orders set customer_id = null;
3 commit;
4
Run Code Online (Sandbox Code Playgroud)
我如何使用 sqlplus 对一个事务执行一个或多个语句?
使用 SQL*PLUS,我无法在行命令期间使用退格按钮擦除内容。
当我按下退格键时,它不是擦除而是写 ^H
有没有办法配置退格键使其按预期工作?
我在我的 spool sql 脚本中使用下面列出的 sql 语句,并且我正在从 sqlplus 执行这个脚本。但在终端查询输出仍然存在,我在命令提示符中使用 sqlplus。但是当我尝试直接启动 sqlplus.exe 并使用此脚本时,我没有在终端中获得查询输出。
当我从命令提示符启动 sqlplus 时,有人可以帮助如何停止终端输出吗?
SET ECHO OFF
SET TERMOUT OFF
SET FEEDBACK OFF
SET PAGESIZE 0
SET LINESIZE 83
SET TRIMSPOOL ON
SET WRAP ON
SET RECSEP OFF
SPOOL '&1'
SELECT
DATA_OUT_DATA
FROM
STAGE.DATA_TABLE
ORDER BY
DATA_UNIQ_ID,DATA_INV_ID, DATA_SEQ_NO;
SPOOL OFF
SET PAGESIZE 24
SET LINESIZE 80
SET FEEDBACK ON
SET TERMOUT ON
Run Code Online (Sandbox Code Playgroud) sqlplus ×10
oracle ×7
windows ×2
connectivity ×1
linux ×1
listener ×1
oracle-xe ×1
plsql ×1
postgresql ×1
psql ×1
transaction ×1