我正在调用这样的PL/SQL过程:
execute util.verify(src_schema => '&username',
stab => '&tab_name');
Run Code Online (Sandbox Code Playgroud)
我收到这些错误:
SQL> execute util.verify(src_schema => '&username',
BEGIN util.verify(src_schema => 'u1',; END;
*
ERROR at line 1:
ORA-06550: line 1, column 57:
PLS-00103: Encountered the symbol ";" when expecting one of the following:
( - + case mod new not null <an identifier>
<a double-quoted delimited-identifier> <a bind variable>
continue avg count current exists max min prior sql stddev
sum variance execute forall merge time timestamp interval
date <a string literal with character …Run Code Online (Sandbox Code Playgroud) 如何使 Oracle 11g 在包含的 SQL 文件中出现任何错误时回滚整个事务?
文件内容为:
set autocommit off
whenever SQLERROR EXIT ROLLBACK
insert into a values (1);
insert into a values (2);
drop index PK_NOT_EXIST;
commit;
Run Code Online (Sandbox Code Playgroud)
并且使用“@”将该文件包含到 sqlplus 会话中:
@error.sql
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,sqlplus 会话终止,输出为
SQL> @error.sql
1 row created.
1 row created.
drop index PK_NOT_EXIST *
ERROR at line 1:
ORA-01418: specified index does not exist
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Run Code Online (Sandbox Code Playgroud)
但是当我重新启动 …
我在 sql 代码中找到了这一行:
@../../sql_scripts/create_tables.sql
Run Code Online (Sandbox Code Playgroud)
它有什么作用?我知道这@@file.sql意味着 file.sql 正在运行,并且@可以在我们以后想要提供参数值时使用,但在这里我@后面跟了一个文件名。我知道有一个类似的问题,但它只涵盖@查询。
我有以下带有正则表达式的查询:
select REGEXP_REPLACE ('TEST 3304 V2', '[`~!@#$%^&*()_+-={}|;.:<>?,./]', ' ') as REG
from dual;
Run Code Online (Sandbox Code Playgroud)
当在Windows机器上通过 SQL*Plus 执行时,它返回以下内容:
SQL> select REGEXP_REPLACE ('TEST 3304 V2', '[`~!@#$%^&*()_+-={}|;.:<>?,./]', ' ') as REG from dual;
REG
------------
TEST 3304 V2
Run Code Online (Sandbox Code Playgroud)
在SunOS机器上我得到不同的结果:
SQL> select REGEXP_REPLACE ('TEST 3304 V2', '[`~!@#$%^&*()_+-={}|;.:<>?,./]', ' ') as REG from dual;
REG
------------
TEST V
Run Code Online (Sandbox Code Playgroud)
这些查询针对同一 Oracle 服务器运行。输出差异有什么原因吗?
Windows 上的 SQL*Plus 版本:
SQL*Plus: Release 11.2.0.1.0 Production on Mar. Oct. 14 15:36:35 2014
Copyright (c) 1982, 2010, Oracle. All rights reserved. …Run Code Online (Sandbox Code Playgroud) 我有一个批处理文件,其中包含许多步骤,可以一一执行。
但是,为了能够使其更加灵活,我想在SQLPlus.
类似于,首先从查询中获取条件变量的值并存储在 say 中v_variable。然后将其用于一些检查,例如
IF v_variable = 'Y' THEN
--DO SOME DDL
ELSE
--DO OTHER DDL
END IF
Run Code Online (Sandbox Code Playgroud)
我必须在批处理文件的许多地方重复这个块,我无法通过 PL/SQL 以某种方式完成它。
我正在尝试使用此COLUMN命令,SQLPlus但以某种方式无法获取要保存的变量值。
COLUMN VARIABLE1 NEW_VALUE V_VARIABLE1
SELECT PARAM_VAL AS VARIABLE1 FROM TABLE_T WHERE PARAM_TYPE = 'XYZ';
-- This query will only throw one record.
DEFINE V_VARIABLE1
Run Code Online (Sandbox Code Playgroud)
那是绝对错误的吗?我们如何查看是否V_VARIABLE1从查询中获取值?
即使我做对了,我也对这IF-ELSE部分一无所知。有人可以帮忙吗?我对适用于 SQLPlus 的解决方案感兴趣。
我正在尝试从我的 UNIX 机器连接到 Oracle 数据库。总的来说,我对剧本写作很陌生。我知道如何浏览unix并编写了基本脚本(读取/显示)并使用bash命令执行它们。我还知道如何查看 unix 中的变量(用户和系统)。你能告诉我需要做什么才能连接到 oracle 数据库吗?我应该使用 sqlplus 命令吗?在此之前我必须设置任何变量吗?
我正在尝试创建一个打印消息然后创建表的 PL/SQL 脚本。
如果我在 SqlPlus 中运行脚本,则会打印消息,创建表,但我收到一条错误消息,指出该表正在使用中。似乎“创建表”正在运行两次。在 SQLDeveloper 中,我没有错误。
这是我的脚本:
set serveroutput on
begin
dbms_output.Put_line('running test.sql');
end;
/
create table my_table
(
name varchar2(100) not null
);
/
Run Code Online (Sandbox Code Playgroud)
这是输出:
SQL> @test.sql
running test.sql
PL/SQL procedure successfully completed.
Table created.
create table my_table
*
ERROR at line 1:
ORA-00955: name is already used by an existing object
SQL>
Run Code Online (Sandbox Code Playgroud)
我做错了什么?
提前致谢。
我用的是oracle 12G
\n\n当我@F:\\update.sql从 sql plus 运行时,它显示重音字符\xc3\xa9运行时,当我从 sqlplus 或 sql Developer 检索时,它会将重音字符显示为垃圾字符
当从 sql plus 运行单个语句时。现在,如果我从 sqlplus 检索它,它会显示正确的字符,但是当我从 sqldeveloper 检索它时,它再次显示垃圾字符。
\n\nupdate.sql内容是这样的
\n\nupdate employee set name =\'\xc3\xa9\' where id= 1;\nRun Code Online (Sandbox Code Playgroud)\n\n我想要的是当我运行 @F:\\update.sql 时,它应该以正确的格式插入/更新/检索它,无论它是来自 sqlplus 还是任何其他工具?
\n\n信息:- 当我跑步时
\n\n SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER LIKE \'%CHARACTERSET%\' \nRun Code Online (Sandbox Code Playgroud)\n\n我得到以下信息
\n\nPARAMETER VALUE\n------------------------------ ----------------------------------------\nNLS_CHARACTERSET WE8MSWIN1252\nNLS_NCHAR_CHARACTERSET AL16UTF16\nRun Code Online (Sandbox Code Playgroud)\n\n当我@.[%NLS_LANG%]从命令提示符运行时我看到
SP2-0310: unable to open file ".[AMERICAN_AMERICA.WE8MSWIN1252]"\nRun Code Online (Sandbox Code Playgroud)\n 我正在使用 powershell 运行sqlplus,我希望 PowerShell 在脚本运行后检测是否有错误并执行一些操作,而不是查看结果文件。
& 'sqlplus' 'system/myOraclePassword' '@Test' | out-file 'result.txt';
Run Code Online (Sandbox Code Playgroud)
通常在DOS中,命令遇到错误时会出现%errorlevel%,不知道PowerShell中是否有类似的东西?
当然,我可以自己阅读日志文件,但有时,事情太常规了,我可能会忘记。
我的Test.sql:
select level from dual
connect by level<5;
select 10/0 from dual;
quit;
Run Code Online (Sandbox Code Playgroud)
显然有一个除以零误差。result.txt 捕获了它,但我希望 powershell 也检测到它
SQL*Plus:2017 年 4 月 27 日星期四 16:24:30 发布 12.1.0.2.0 生产版
版权所有 (c) 1982, 2014,甲骨文。版权所有。
上次成功登录时间:2017年4月27日星期四16:17:34 -04:00
连接到:
Oracle Database 12c 企业版 12.1.0.2.0 版 - 64 位生产
使用分区、OLAP、高级分析和实际应用程序测试选项
等级
----------
1
2
3
4
从双中选择 10/0
*
第 1 行的错误:
ORA-01476: 除数等于零
powershell语句像DOS一样执行后会返回errorlevel吗?
我试过了:
& 'sqlplus' 'system/myOraclePassword' '@Test' …Run Code Online (Sandbox Code Playgroud) 我有一个在 Oracle 数据库(Windows 或 Unix 操作系统)上运行的脚本。它提取数据,然后将其假脱机到 .txt 文件。
\n为了确保文件不变,在运行脚本时对数据进行哈希处理,然后在 Web 应用程序中重新计算该哈希值。这可以工作 9/10 次,但有时它会提供不匹配,即使文件是相同的,我将其隔离为编码问题。
\n为了确定文件使用的编码,该脚本将 3 个非 ASCII 字符写入文件,这些字符在不同的编码方案中编码不同。这些稍后会映射到后端。
\n--Encoding related information\nSPOOL &&file_desc/Encoding.txt\nSELECT ('\xe2\x82\xac'||';'||'\xc6\x92'||';'||'\xe2\x80\xb0') FROM sys.dual;\nSPOOL off\nRun Code Online (Sandbox Code Playgroud)\n在使用 UTF-8 编码的数据库上,应正确假脱机包含 NONASCII 字符的数据,并且 3 个 NONASCII 字符也应正确假脱机。
\n当使用 .AL32UTF8 系统字符集(与 DB 相同)时,数据会正确假脱机,但用于编码的 3 个字符则不然。这使得我无法确定使用了哪种编码方案。
\n数据库具有以下字符集(从database_properties获得):
\nNLS_CHARACTESET:AL32UTF8
\nNLS_NCHAR_CHARACTERSET:AL16UTF16
\n使用 SQL-Developer 时(将编码设置为 UTF8 后)),我没有任何问题。日语和希腊字符都正确显示,并且用于编码的字符也正确显示,从而在稍后重新计算时导致成功的哈希匹配。
\n我也需要它在 SQL*Plus 中工作,但我\xe2\x80\x99 遇到了问题。我\xe2\x80\x99已经尝试了一系列不同的变体。DB是Oracle 18c Express版本:
\n …