我是Oracle和SQL的新手,我正在尝试从SQL*Plus中执行一个简单的测试函数.我的函数叫做tf(用于测试函数),它在一个名为tf.sql的文件中定义如下;
create or replace
function
tf
(
arg1 in varchar2
)
return number
as
return_value number;
begin
return_value := 0;
dbms_output.put_line('Argument 1 = ' || arg1);
return return_value;
end;
/
Run Code Online (Sandbox Code Playgroud)
我可以使用以下命令成功将此函数加载到Oracle中;
SQL> start ./tf.sql
Run Code Online (Sandbox Code Playgroud)
执行此命令后,SQL*Plus只会说明;
Function created.
Run Code Online (Sandbox Code Playgroud)
然后我从SQL*Plus命令提示符执行以下命令(在我调用set serveroutput on之后);
SQL> exec dbms_output.put_line(SYSTEM.TF('Hello'));
Run Code Online (Sandbox Code Playgroud)
我得到以下输出;
Argument = Hello
0
PL/SQL procedure successfully completed.
Run Code Online (Sandbox Code Playgroud)
现在,如果我尝试直接从SQL*Plus命令提示符执行我的函数,请使用以下命令;
SQL> exec SYSTEM.TF('Hello');
Run Code Online (Sandbox Code Playgroud)
然后我收到来自SQL*Plus的以下错误消息;
BEGIN SYSTEM.TF('Hello'); END;
*
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00221: 'TF' is not a procedure or is undefined
ORA-06550: …Run Code Online (Sandbox Code Playgroud) 我通常以这种方式使用游标:
for rec in (select * from MY_TABLE where MY_COND = ITION) loop
if rec.FIELD1 = 'something' then
do_something();
end if;
if rec.FIELD2 <> 'somethingelse' then
blabla();
end if;
end loop;
Run Code Online (Sandbox Code Playgroud)
我的团队负责人告诉我不要使用select *因为编程不好,但我不明白为什么(在这种情况下).
尝试编译时,我收到以下错误
错误(16,8):PLS-00103:遇到以下其中一项时遇到符号"SPROLLUPEXPENSEITEM":: =.(@%;符号":="代替"SPROLLUPEXPENSEITEM"继续.
和
错误(17,15):PLS-00103:当遇到以下情况之一时遇到符号"=":. (*@%= - + </>在是模余数不那么REM <>或=或〜=> = <= <>和或类似的多集||构件SUBMULTISET之间LIKE2样4 likec!
create or replace
TRIGGER tr_ExpenseItem_Rollup
AFTER DELETE OR UPDATE of ExpApprAmt
ON ExpenseItem
FOR EACH ROW
DECLARE
RollupAmt Number;
BlnResult Boolean;
BEGIN
IF DELETING THEN
RollupAmt := -1 * :Old.ExpApprAmt;
End If;
IF UPDATING Then
RollupAmt := :New.ExpApprAmt - :Old.ExpApprAmt;
End IF;
Call spRollUpExpenseItem(:New.ERNo,:New.ECNo,RollupAmt,BlnResult);
If BlnResult := TRUE
--Additional Logic Here
End IF;
END;
Run Code Online (Sandbox Code Playgroud)
我是一名学生而且很新,所以任何帮助都会受到赞赏.
您好我使用sqldeveloper连接到oracle数据库.
我的senario是我的数据库中有一个客户表,start_date其中包含一个日期字段,该字段包含用户注册日期和调用的"布尔"字段is_member.每个会员资格仅持续一年,is_member如果是,则为假SYSDATE > start_date + 1year.
我想is_member在用户调用select语句之前检查用户是否仍然是成员(如果没有则更改).这可能吗?
如果没有人有任何关于如何保持该is_member领域最新的想法?你可以做一个每天调用一次的触发器来查看会员资格是否已经过期?
谢谢你的推荐!=]
我有一个TABLE1带有列NUMBER(8)和列的常规表varchar2(100).
现在我创建了一个OBJECT TYPE T_MYTYPE有两个属性:一个NUMBER和另一个varchar2.
简而言之,它们完全相同.
现在我想做以下事情.
v_obj T_MYTYPE;
begin
select * into v_obj from TABLE1 t1 where t1.num = 9;--guaranteed to return only ONE row!!
end;
Run Code Online (Sandbox Code Playgroud)
但是PL/SQL:ORA-00947:值不够 ..
这是很令人沮丧......我只是希望能够返回ONE一行数据到一个集合!无论是记录还是对象类型!!,我不在乎......我似乎无法做出这项工作...... !!!! 谁能帮忙?
我有一个高度嵌套的OBJECT TYPE结构,允许我以树状方式保存数据.
我现在想创建一个表来缓存这些对象,但是我很难创建表.我怀疑我的问题是多个嵌套级别,但不确定如何修复.
CREATE TYPE STEP_OBJ AS OBJECT (
ID VARCHAR2(20),
OTHER_FIELDS VARCHAR2(100));
/
CREATE TYPE STEP_TAB_OBJ AS TABLE OF STEP_OBJ;
/
CREATE TYPE TREE_OBJ AS OBJECT (
STEPS STEP_TAB_OBJ,
COMPLETE VARCHAR2(1));
/
CREATE TYPE TABLE_OF_TREE_OBJ AS TABLE OF TREE_OBJ;
/
CREATE TABLE TREE_TABLE_CACHE (
HANDLE VARCHAR2(20),
TABLE_OF_TREES TABLE_OF_TREE_OBJ)
NESTED TABLE TABLE_OF_TREES STORE AS TREE_TABLE_CACHE_OBJS;
/
CREATE TABLE TREE_TABLE_CACHE (
*
ERROR at line 1:
ORA-02320: failure in creating storage table for nested table column TABLE_OF_TREES
ORA-22913: must specify table …Run Code Online (Sandbox Code Playgroud) 我们可以在程序里面调用函数,但是可以在函数内部调用程序吗?我试过但我不能在函数内部调用程序.你能告诉我为什么我们不能调用函数内的程序吗?
我想这样做:
arrCauses := APEX_UTIL.STRING_TO_TABLE(:P1_CAUSE);
FOR c IN 1..arrCauses.count LOOP
INSERT INTO DT_EVENT_CAUSE (
EVENT_ID,
CAUSE_ID)
VALUES (
nextPK, c);
END LOOP;
Run Code Online (Sandbox Code Playgroud)
或这个
arrCauses := APEX_UTIL.STRING_TO_TABLE(:P1_CAUSE);
FOR c IN arrCauses.first..arrCauses.last LOOP
INSERT INTO DT_EVENT_CAUSE (
EVENT_ID,
CAUSE_ID)
VALUES (
nextPK, c);
END LOOP;
Run Code Online (Sandbox Code Playgroud)
问题是... c总是只是计数,所以如果数组是1项,则会插入1的ac.如果数组中有3个项目,则将插入c的1,2和3.与数组中的实际值相反.我究竟做错了什么?!
我感兴趣的是PL/SQL块可以将Oracle表的内容传输到硬盘上的文本文件中.我需要一个PL/SQL块,它可以下载一个表的内容,用于将日志数据存储到文本文件中.
问候
这很可能是一个非常愚蠢的问题,但我已经尝试过搜索并回答空洞.
我正在编写一个采用CHAR类型参数的过程.即:
CREATE PROCEDURE Proc1 (Param1 CHAR(5))
AS
BEGIN
...
END;
Run Code Online (Sandbox Code Playgroud)
这不起作用,并在CHAR(5)区域周围抛出错误.如果我没有为参数指定大小,那么只需将其保留为CHAR它就可以正常工作.我尝试过包含关键字IN,但这并没有什么区别.
无论如何在PL/SQL过程中指定参数的大小?