当我在Oracle shell中运行以下内容时,它可以正常工作
truncate table table_name
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将其放入存储过程时
CREATE OR REPLACE PROCEDURE test IS
BEGIN
truncate table table_name;
END test;
/
Run Code Online (Sandbox Code Playgroud)
它失败了
ERROR line 3, col 14, ending_line 3, ending_col 18, Found 'table', Expecting: @ ROW or ( or . or ; :=
Run Code Online (Sandbox Code Playgroud)
为什么?
谢谢,Klas Mellbourn
我需要编写一个过程来规范化一个记录,该记录具有由一个char连接的多个标记.我需要获取这些标记分割字符串并将每个标记作为新记录插入表中.Oracle是否有类似"拆分"功能的东西?
SET SERVEROUTPUT ON
DECLARE
v_student_id NUMBER := &sv_student_id;
v_section_id NUMBER := 89;
v_final_grade NUMBER;
v_letter_grade CHAR(1);
BEGIN
SELECT final_grade
INTO v_final_grade
FROM enrollment
WHERE student_id = v_student_id
AND section_id = v_section_id;
CASE -- outer CASE
WHEN v_final_grade IS NULL THEN
DBMS_OUTPUT.PUT_LINE ('There is no final grade.');
ELSE
CASE -- inner CASE
WHEN v_final_grade >= 90 THEN v_letter_grade := 'A';
WHEN v_final_grade >= 80 THEN v_letter_grade := 'B';
WHEN v_final_grade >= 70 THEN v_letter_grade := 'C';
WHEN v_final_grade >= 60 THEN …Run Code Online (Sandbox Code Playgroud) 在PLSQL中,是否有可能选择除1或2之外的表中的所有字段,而不必指定所需的字段?
例如,employee表包含以下字段:
是否仍然可以编写类似的查询
select * from employee
Run Code Online (Sandbox Code Playgroud)
离开球场hobbies而不必写这样的东西?
select id, firstname, lastname from employee
Run Code Online (Sandbox Code Playgroud) 我使用以下查询创建了一个序列,
create sequence qname_id_seq start with 1 increment by 1 nocache;
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试创建一个使用上述序列的表时,它会抛出以下错误,
Error report:
SQL Error: ORA-00907: missing right parenthesis
00907. 00000 - "missing right parenthesis"
Run Code Online (Sandbox Code Playgroud)
我使用以下查询来创建一个带有sequence.nextval的表,
CREATE TABLE qname
(
qname_id integer NOT NULL default qname_id_seq.nextval PRIMARY KEY,
qname VARCHAR2(4000) NOT NULL -- CONSTRAINT qname_uk UNIQUE
);
Run Code Online (Sandbox Code Playgroud) 我想创建一个带有一个参数的存储过程,该参数将根据参数返回不同的记录集.这样做的方法是什么?我可以从普通的SQL中调用它吗?
在oracle 10g中执行此SQL后:
SELECT SYSDATE, CURRENT_TIMESTAMP FROM DUAL
Run Code Online (Sandbox Code Playgroud)
我收到这个奇怪的输出:

造成时间差异的原因是什么?服务器时间等于SYSDATE值
我需要在pl/sql中调试以计算程序的次数,我想使用:
SELECT systimestamp FROM dual INTO time_db;
DBMS_OUTPUT.PUT_LINE('time before procedure ' || time_db);
Run Code Online (Sandbox Code Playgroud)
但我不明白输出的位置,如何将其重定向到包含我想要收集的所有数据的日志文件?
我正在尝试运行一个具有几列CLOB数据类型的查询.如果我像正常一样运行查询,那么所有这些字段都只有(CLOB)值.
我尝试使用DBMS_LOB.substr(column),我得到错误
ORA-06502: PL/SQL: numeric or value error: character string buffer too small
Run Code Online (Sandbox Code Playgroud)
我如何查询CLOB列?