标签: sqlplus

在多行中打破PL/SQL过程调用的正确语法是什么?

我正在调用这样的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)

sql oracle plsql sqlplus ora-06550

5
推荐指数
3
解决办法
6666
查看次数

Oracle 11 - sqlplus - 在出错时回滚整个脚本 - 如何?

如何使 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)

但是当我重新启动 …

sqlplus rollback oracle11g

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

SQL*Plus 中的“@”有什么作用

我在 sql 代码中找到了这一行:

@../../sql_scripts/create_tables.sql
Run Code Online (Sandbox Code Playgroud)

它有什么作用?我知道这@@file.sql意味着 file.sql 正在运行,并且@可以在我们以后想要提供参数值时使用,但在这里我@后面跟了一个文件名。我知道有一个类似的问题,但它只涵盖@查询。

sql oracle sqlplus

5
推荐指数
1
解决办法
463
查看次数

具有连字符的 Oracle 正则表达式在 Windows 上给出的结果与 Unix 上的结果不同

我有以下带有正则表达式的查询:

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)

regex oracle sqlplus

5
推荐指数
1
解决办法
2230
查看次数

使用来自查询的变量进行 SQLPlus 条件执行

我有一个批处理文件,其中包含许多步骤,可以一一执行。

但是,为了能够使其更加灵活,我想在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 的解决方案感兴趣。

sqlplus batch-file conditional-statements

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

如何从unix连接到oracle数据库

我正在尝试从我的 UNIX 机器连接到 Oracle 数据库。总的来说,我对剧本写作很陌生。我知道如何浏览unix并编写了基本脚本(读取/显示)并使用bash命令执行它们。我还知道如何查看 unix 中的变量(用户和系统)。你能告诉我需要做什么才能连接到 oracle 数据库吗?我应该使用 sqlplus 命令吗?在此之前我必须设置任何变量吗?

database unix oracle shell sqlplus

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

sqlplus 复制创建表。ORA-00955: 名称已被现有对象使用

我正在尝试创建一个打印消息然后创建表的 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 sqlplus ora-00955

5
推荐指数
1
解决办法
1029
查看次数

在数据库中更新/插入/检索重音字符?

我用的是oracle 12G

\n\n

当我@F:\\update.sql从 sql plus 运行时,它显示重音字符\xc3\xa9运行时,当我从 sqlplus 或 sql Developer 检索时,它会将重音字符显示为垃圾字符

\n\n

当从 sql plus 运行单个语句时。现在,如果我从 sqlplus 检索它,它会显示正确的字符,但是当我从 sqldeveloper 检索它时,它再次显示垃圾字符。

\n\n

update.sql内容是这样的

\n\n
update employee set name =\'\xc3\xa9\' where id= 1;\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想要的是当我运行 @F:\\update.sql 时,它应该以正确的格式插入/更新/检索它,无论它是来自 sqlplus 还是任何其他工具?

\n\n

信息:- 当我跑步时

\n\n
   SELECT * FROM NLS_DATABASE_PARAMETERS  WHERE PARAMETER LIKE \'%CHARACTERSET%\' \n
Run Code Online (Sandbox Code Playgroud)\n\n

我得到以下信息

\n\n
PARAMETER                      VALUE\n------------------------------ ----------------------------------------\nNLS_CHARACTERSET               WE8MSWIN1252\nNLS_NCHAR_CHARACTERSET         AL16UTF16\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我@.[%NLS_LANG%]从命令提示符运行时我看到

\n\n
SP2-0310: unable to open file ".[AMERICAN_AMERICA.WE8MSWIN1252]"\n
Run Code Online (Sandbox Code Playgroud)\n

sql oracle sqlplus

5
推荐指数
1
解决办法
3768
查看次数

执行powershell语句后检测错误

我正在使用 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)

powershell sqlplus

5
推荐指数
1
解决办法
1897
查看次数

使用 UTF-8 编码从 Oracle 数据库假脱机文件时出现编码问题

问题描述:

\n

我有一个在 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\n
Run Code Online (Sandbox Code Playgroud)\n

预期结果

\n

在使用 UTF-8 编码的数据库上,应正确假脱机包含 NONASCII 字符的数据,并且 3 个 NONASCII 字符也应正确假脱机。

\n

实际结果

\n

当使用 .AL32UTF8 系统字符集(与 DB 相同)时,数据会正确假脱机,但用于编码的 3 个字符则不然。这使得我无法确定使用了哪种编码方案。

\n

数据库具有以下字符集(从database_properties获得):

\n

NLS_CHARACTESET:AL32UTF8

\n

NLS_NCHAR_CHARACTERSET:AL16UTF16

\n

SQL-Developer 工作

\n

使用 SQL-Developer 时(将编码设置为 UTF8 后)),我没有任何问题。日语和希腊字符都正确显示,并且用于编码的字符也正确显示,从而在稍后重新计算时导致成功的哈希匹配。

\n

SQL*Plus 无法\xe2\x80\x99 工作

\n

我也需要它在 SQL*Plus 中工作,但我\xe2\x80\x99 遇到了问题。我\xe2\x80\x99已经尝试了一系列不同的变体。DB是Oracle 18c Express版本:

\n …

oracle encoding plsql sqlplus utf-8

5
推荐指数
1
解决办法
3632
查看次数