- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我现在的场景是这样的:
我知道这可以在 sqlplus 中借助 UTL_FILE 包进行检查,但不幸的是,由于客户端策略,此包的访问在当前系统中被限制 .
另一种方法是退出sqlplus并在UNIX中执行文件检查,然后重新登录sqlplus执行其余操作。但我认为这会导致执行时间变慢,而性能是此实现中的一个重要因素,因为表包含大量数据(以百万计).
那么有没有其他方法可以在不退出当前 session 的情况下从 sqlplus 检查这个?
系统信息:
操作系统 - 红帽企业 Linux
数据库 - Oracle 11g
最佳答案
如果该文件与您运行 SQL*Plus 的机器位于同一台机器上,您可能会使用 the host
command .
如果您正在检查的文件与您正在假脱机处理的文件相同,那么它肯定存在,否则您将遇到某种 SP 错误;但是如果你出于某种原因确实想检查同一个文件,并假设你有一个文件名的替换变量:
define csv_file=/path/to/spool.csv
-- call procedure
spool &csv_file
-- do query
spool off
host ls &csv_file
update your_table
set foo=bar
where &_rc = 0;
如果运行 host
命令时文件存在,则 _rc
替换变量将设置为零。如果该文件不存在或由于任何原因不可读,它将是其他内容 - 例如2 如果文件不存在。将检查 &_rc = 0
添加到您的更新将意味着如果出现错误则不会更新任何行。 (当然,您仍然可以满足更新所需的任何其他条件)。
您可以通过在主机命令字符串中添加 1>/dev/null
来抑制文件名的显示;还可以通过添加 2>/dev/null
来抑制任何错误消息,尽管您可能希望看到这些消息。
文档警告不要使用 &_rc
,因为它不可移植;但它适用于 RHEL,因此只要您不需要将脚本移植到其他操作系统,这对您来说就足够了。但是,您不能对文件的内容做任何事情,或解释有关它的任何事情。您所拥有的只是您运行的命令的返回码。如果您需要更复杂的东西,您可以调用生成特定返回码的脚本,但这会变得有点困惑。
关于database - 在没有 UTL_FILE 的情况下从 SQLplus 检查 UNIX 中是否存在文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41468835/
我有一个脚本文件,它向 sqlplus 发送查询并将输出发送到其他一些输出文件。 但是,此输出文件包含来自 sqlplus 的一些信息 - 某种问候。 SQL*Plus: Release 11.2.0
我有一个使用连接详细信息调用 PLSQL 的批处理脚本,它工作正常,但我仍然必须在连接时显式地 SET DEFINE OFF。我想增强我的简单批处理脚本以将 SET DEFINE OFF 命令传递给
我正在尝试从java运行sql脚本(此处为memo_222dataFERG.out)并 try catch sqlplus窗口的输出。这是我的代码 Runtime rt = Runtime.getRu
有没有办法显示 sqlplus 命令的输出而不必先发出 spool off 命令? 我将 sqlplus session 的结果假脱机到文件,同时拖尾文件。这样做的原因是对于行很长的表,格式更容易从文
我在 .sql 文件中执行下面的脚本。我正在使用 Windows 命令行控制台来调用 sqlplus。当脚本终止时,一切看起来都不错,只是我看不到 INSERT 语句添加的记录数。您还可以在下面看到输
我被提供(由某些框架)在 sqlplus 中运行命令,但我自己没有启动它。 我想知道那个 sqlplus 运行的版本。 最佳答案 在 SQL*Plus 中,有一些预先定义的替换变量: SQL> def
为什么 execute immediate 'truncate table trade_economics'; 在 sqlplus 脚本中给出以下错误? BEGIN immediate 'trunc
在 windows 上使用 sqlplus 11g 在 11g 数据库上运行 sql 脚本。如果插入行留在脚本中,则 Sqlplus 会挂起。如果我注释掉插入行,脚本会返回记录。 在 sql deve
为什么 execute immediate 'truncate table trade_economics'; 在 sqlplus 脚本中给出以下错误? BEGIN immediate 'trunc
我必须为我的数据库类使用 SQLPLUS,我们的第一个作业是简单的保存。 我按照说明进行操作..(我正在使用 PuTTY 访问 sqlplus) “在本练习中使用以下 SQL 命令,并尝试使用 SAV
在 SQLPlus 中执行脚本时,我遇到了一个问题: script.sql 包含以下几行 @some_pkg.pks @some_pkg.pkb drop package some_pkg; / 调用
我有密码中的特殊字符问题 - '@'。 我不知道如何将带有这个特殊字符的密码传递给脚本文件并使用 sqlplus 连接的问题。 例如,我有用户“test_user”,密码为“temp123@”。对于通
我有一个用户表,我在其中查找名称为 john 的用户 ID select USER_ID from user where USER_ID like '%john%'; 我明白了 USER_ID ---
我在 bash 脚本中有以下内容。 inputsqls.txt 文件包含 10 个需要几个小时才能运行的 SQL 语句。有没有办法在所有 10 个语句运行之前定期将结果写入 output.txt?也就
抱歉,可能是一个非常愚蠢的问题,困扰着大家,但是我才刚刚开始学习数据库管理系统,今天我尝试了我的第一个sql类,必须通过提供我的登录详细信息进行登录,并学习了一些入门语法。但是我已经有了我的第一个sq
有没有办法让 sqlplus 可以打印它执行的语句。 我的意思是我有一些在 bash 脚本中运行的 .sql 文件。当我阅读日志文件时,我需要知道 sqlplus 运行了哪个语句。 例子: 假设我有这
我想知道 sqlplus 如何在连接语句“sqlplus/”中获取用户名和密码。 如果我想与不同用户的“sqlplus/”连接,我该如何更改配置。这可能看起来很尴尬,但在我的脚本中“sqlplus/”
我正在使用 shell 脚本来运行用 sql 脚本文件编写的 sql。在脚本文件中有一些绑定(bind)变量可以从shell 运行时参数。 这是我的代码。 result=`sqlplus -s ${D
我经常需要在我的一个数据库中的某个表上运行单个查询,如果不需要的话,我宁愿不必创建一个文件并将其作为脚本和所有内容调用。 我希望能够像这样将查询作为字符串直接发送到 sqlplus sqlplus u
我想删除表中的所有数据行,但不删除表。 delete 语句有一个 where 子句,所以我必须对每一行一一给出。有没有其他方法可以删除表中的整个数据行? 这是 Oracle并使用 sqlplus 最佳
我是一名优秀的程序员,十分优秀!