相关疑难解决方法(0)

我何时需要在Oracle SQL中使用分号与斜杠?

我们本周在我的公司一直在讨论如何编写SQL脚本.

背景:我们的数据库是Oracle 10g(很快升级到11).我们的DBA团队使用SQLPlus将脚本部署到生产环境.

现在,我们最近部署失败,因为它使用了分号和正斜杠(/).分号在每个语句的末尾,斜杠在语句之间.

alter table foo.bar drop constraint bar1;
/
alter table foo.can drop constraint can1;
/
Run Code Online (Sandbox Code Playgroud)

稍后在脚本中添加了一些触发器,创建了一些视图以及一些存储过程.同时具有;/导致每个语句运行两次导致错误(尤其是在插入,是唯一的,其需要).

在SQL Developer中,这不会发生,在TOAD中这不会发生.如果你运行某些命令,如果没有它们,它们将无法工作/.

在PL/SQL中,如果你有子程序(DECLARE,BEGIN,END),使用的分号将被视为子程序的一部分,因此你必须使用斜杠.

所以我的问题是:如果您的数据库是Oracle,那么编写SQL脚本的正确方法是什么?既然你知道你的数据库是Oracle应该总是使用/

sql oracle

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

在PL/SQL中创建表?

我正在尝试在PL/SQL中创建一个表

我怎么能做到这一点?

继续

错误报告:

ORA-00933:"SQL命令未正确结束"

这是我有错误的代码

DECLARE
  station_id_ms1  NUMBER :=10347;
  realtime_start  DATE   :=to_date('2012-01-01 00:00:00','YYYY-DD-MM HH24:MI:SS');
  realtime_end    DATE   :=to_date('2012-07-01 00:00:00','YYYY-DD-MM HH24:MI:SS');
BEGIN
  EXECUTE IMMEDIATE ('
  CREATE TABLE new_table_name
  AS
  SELECT
  ((realtime - to_date(''01-JAN-1970'',''DD-MON-YYYY'')) * (86400)) AS realtime_ms1,
  magnetic_ms_id,
  ADC_value_pp_2_mgntc_fld_amp(ch2_value,ch2_gain_value,magnetic_ms_id,2) AS B_x_ms1,
  ADC_value_pp_2_mgntc_fld_amp(ch1_value,ch1_gain_value,magnetic_ms_id,1) AS B_y_ms1,
  real_nanosecs2*4/3*360/20e6 AS phase_x_ms1,
  real_nanosecs1*4/3*360/20e6 AS phase_y_ms1
  FROM
      raw_mag
  WHERE
    magnetic_ms_id    = '||station_id_ms1||'
  AND realtime        > '||realtime_start||'
  AND realtime        < '||realtime_end||'
  AND ch1_tune_value  = 0
  AND realtime        < pkg_timezone.change_timezone(gettime,''CET'',''UTC'')
  ');  
END;
Run Code Online (Sandbox Code Playgroud)

oracle plsql oracle11g

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

PLS-00103:遇到符号“DECLARE”

我正在尝试执行或运行以下 pl/sql 脚本:

SET serveroutput on;

CREATE OR REPLACE PROCEDURE findAvg
(p_category IN products.category_id% TYPE, c OUT NUMBER)
AS
BEGIN
SELECT NVL ((SELECT AVG(LIST_PRICE) FROM products
WHERE p_category = category_id), -1) into p_category
from dual;
END findAvg;
DECLARE
 cat  products.category_id%TYPE;
 Price   products.List_price%TYPE;
BEGIN
cat := &p_category;
findAvg (cat, price); 
if (price = -1) then
    dbms_output.put_line('Wrong Category ');
ELSE
    dbms_output.put_line('the average price for category' || cat || ' is ' || price);
 END IF;
END;
/
show errors
Run Code Online (Sandbox Code Playgroud)

但是当我尝试运行它时,我收到此错误消息(我只能在显示错误后才能看到它):

       PLS-00103: Encountered …
Run Code Online (Sandbox Code Playgroud)

oracle plsql

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

标签 统计

oracle ×3

plsql ×2

oracle11g ×1

sql ×1