标签: sqlplus

如何在 Oracle SQLPlus 中防止 SQL 注入?

显然,如果我使用 JDBC/ODBC,我可以使用绑定变量和预准备语句来防止 SQL 注入。但是,当数据传递到最终调用 Oracle SQLPlus 的批处理过程时,是否有办法防止 SQL 注入?例如:

查询.sql:

select '&1' from dual;
exit;
Run Code Online (Sandbox Code Playgroud)

如果我这样从 SQLPlus 调用这个脚本:

$ sqlplus SCOTT/TIGER @query.sql "x','y"
Run Code Online (Sandbox Code Playgroud)

我将得到以下输出:

old   1: select '&1' from dual
new   1: select 'x','y' from dual

' '
- -
x y
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,SQLPlus 命令行参数使用简单的宏替换。我缺少替代方法吗?否则,我如何防止它被利用?

sql oracle sql-injection sqlplus batch-file

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

查询结果中列名重复

我在 SQL*Plus 中给出一个 select 语句。它正在检索数据,但每次在一定数量的行之后都会显示列名称。我希望列名只显示一次。

例如:

select emp_name from employee.
Run Code Online (Sandbox Code Playgroud)

目前得到输出:

emp_name
========
raman
sunil
rajesh
dilip

emp_name
========
rahul
pramod
ankita
Run Code Online (Sandbox Code Playgroud)

我想要这样的输出:

emp_name
========
pankaj
ruchi
amar
rakesh
dilip
raju
rahul
Run Code Online (Sandbox Code Playgroud)

全部在单列标题下。我怎样才能做到这一点?

oracle sqlplus

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

使用 raise_application_error 的 PL SQL 触发器显示错误。

我有一些代码需要帮助调试,但我觉得如果我能让其中一个运行,我就能得到其余的(哦,我多么希望)。

create or replace 
trigger minimumwage
before insert or update on Employee
for each row
begin
if :new.Wage < 7.25 
then raise_application_error('-20000,Pay is below Texas minimum wage!');
end if;
end;
/
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我正在尝试在通过 sqlplus 在我学校服务器上运行的表上执行此操作。

sql plsql sqlplus

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

CRON和SQLPLUS

我想在cron中运行一个脚本,其中包含一些sqlplus命令.

问题是,当在cron中执行时,sqlplus命令由于某种原因不会被执行.如果我自己执行它,脚本运行正常.

我已经检查了一些论坛,甚至是stackoverflow.com上的主题,并找到了一些关于正确设置环境变量的技巧.但即使仔细检查后,脚本也无效.

这是我的脚本:

echo $ORACLE_HOME|grep "oracle" > /dev/null
if [ $? = 1 ] ; then
   echo "Setting environment variable"
   # Setting oracle environmet
   . /usr/oracle/product/10.2.0/.profile
   NLS_LANG='AMERICAN_GERMANY.WE8ISO8859P1'
fi

/usr/oracle/product/10.2.0/bin/sqlplus username/password @basics.sql > export.file
Run Code Online (Sandbox Code Playgroud)

basics.sql包含:

set pagesize 0
set feedback off
set heading off
set linesize 400
set NULL nll

SELECT SOME_FIELDS FROM TABLE ORDER BY FIELD;
EXIT;
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

unix oracle cron sqlplus

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

为什么我收到ORA-00937错误?

这是我的oracle查询:

SELECT      DISTINCT Student.student_id, student_name, SUM(credit)
FROM        Student, Class, Enrolls
WHERE       Student.student_id = Enrolls.student_id
AND         Class.schedule_num = Enrolls.schedule_num
AND         Class.semester = Enrolls.semester
AND         grade != 'F'
AND         grade IS NOT null
ORDER BY    student_id ASC;
Run Code Online (Sandbox Code Playgroud)

查询工作正常,直到我添加SUM(credit).之后我得到:

ORA-00937: not a single-group group function
Run Code Online (Sandbox Code Playgroud)

请帮忙,谢谢.

sql oracle sqlplus

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

sqlplus在静默模式下不静默

我在 shell 脚本中使用 sqlplus 并且它可以工作(sqlplus 没有静默模式)但我可以在终端中看到输出。我尝试使用不同的组合在静音模式下运行它,但它没有用 -

sqlplus -s "$DBUSER/$DBPWD@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=$DBHOST)(Port=$DBPORT))(CONNECT_DATA=(SID=$DBSID)))"  @$SCRHOME/getCsv$sqlFile.sql
Run Code Online (Sandbox Code Playgroud)

<顺便说一句 -s 是黄色而不是黑色,就像 shell 脚本中的 echo 命令>

它有效,但我可以在控制台上看到输出。我也试过:

sqlplus \-s "....
sqlplus \-s \ "...
sqplus -S
sqlplus -s \ << EOF "...
Run Code Online (Sandbox Code Playgroud)

我尝试删除双引号,但在这种情况下,即使 sqlplus 命令也不起作用。我在 shell 脚本中使用这个命令。

oracle shell sqlplus

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

如何知道SQL PLUS中的SET是什么?

SQL Plus中有没有办法知道所有SET命令的状态?

例如,WRAP是否设置为OFF或ON等.

我在网上搜索过,找不到任何东西.我也认为它可能类似于CMD中的SET,但是如果你试试这个:

SET
Run Code Online (Sandbox Code Playgroud)

你得到:

SP2-0545:SET命令需要参数.

如何获得所有当前SET的值?

如果我不清楚,我想知道是否有类似这样的命令:

SHOW SETS
Run Code Online (Sandbox Code Playgroud)

这将返回类似的东西

WRAP ON 
LONG 3000
LINESIZE 344
VERIFY OFF
etc..
Run Code Online (Sandbox Code Playgroud)

oracle sqlplus

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

我不希望在删除表时出现错误,尽管该表不存在

我正在使用Oracle 12c,并且在删除表“ CONTINENT”时出现错误(如果它不存在的话)不会引起我的兴趣。

我做了这个

set echo on
set serveroutput on
alter session set current_schema=WORK_ODI;
set verify off
set pause off
--
WHENEVER SQLERROR CONTINUE  

drop table  CONTINENT;

COMMIT;

EXIT;
Run Code Online (Sandbox Code Playgroud)

但是当表不存在时它不会跳过该错误,请问该如何解决

sql oracle sqlplus

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

Oracle PL SQL 中的 ACCEPT 语句

我是 PL SQL 的初学者。

我正在尝试使用 PL SQL ACCEPT 语句接受变量中的字符串。这是代码 -

ACCEPT lastname CHAR FORMAT 'A20' PROMPT 'Enter employee lastname:  '
DECLARE
BEGIN

DBMS_OUTPUT.PUT_LINE(lastname);  
END;
Run Code Online (Sandbox Code Playgroud)

我在 SQL Developer 中没有收到任何错误或输出。我无法理解我在这里错过了什么。

基本上,我想要做的是从用户那里读取一个值(字符串)并在我对表的查询中使用它。

oracle sqlplus oracle-sqldeveloper

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

SQL*Plus 脚本执行两次

我正在尝试使用 sqlplus 运行脚本。我的脚本是一个简单的删除语句。我通过将以下内容放入我的 ksh 终端来执行它:

sqlplus username/'password' @../sql/delete_societes.sql
Run Code Online (Sandbox Code Playgroud)

../sql/delete_societes.sql 是

DELETE FROM f2020.SOCIETES;
/
Run Code Online (Sandbox Code Playgroud)

出于某种原因,它运行了两次,导致输出“0 行被删除”被打印两次并在我尝试执行插入而不是删除时导致错误。

oracle ksh sqlplus

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

标签 统计

sqlplus ×10

oracle ×9

sql ×4

batch-file ×1

cron ×1

ksh ×1

oracle-sqldeveloper ×1

plsql ×1

shell ×1

sql-injection ×1

unix ×1