我在Oracle 10g数据库中的一个名为TEST的oracle包中有一个函数
FUNCTION GetEname(P_ename IN VARCHAR2) RETURN VARCHAR2 AS
retVal VARCHAR2(10);
BEGIN
retVal := SUBSTR(P_ename, 3, INSTR(P_ename, ':', 1, 2) - 3);
RETURN RetVal;
END GetEntDefIEIDFromEname;
Run Code Online (Sandbox Code Playgroud)
我创建了一个ASP.net页面,我在page_load中有以下代码:
String strResult = "";
try
{
oracleConn.ConnectionString = ConfigurationManager.ConnectionStrings["OracleDatabase"].ConnectionString;
oracleConn.Open();
OracleCommand orclCmnd = new OracleCommand();
orclCmnd.Connection = oracleConn;
orclCmnd.CommandText = "TEST.GetEname";
orclCmnd.CommandType = CommandType.StoredProcedure;
OracleParameter ename = new OracleParameter();
ename.ParameterName = "ename";
ename.OracleType = OracleType.VarChar;
ename.Direction = ParameterDirection.Input;
ename.Value = "0:490330";
orclCmnd.Parameters.Add(ename);
strResult = (String)orclCmnd.ExecuteOracleScalar();
oracleConn.Close();
oracleConn.Dispose();
lbl1.Text = "Result of " + …Run Code Online (Sandbox Code Playgroud) 我在PL/SQL中有一个子程序
PRAGMA AUTONOMOUS_TRANSACTION
Run Code Online (Sandbox Code Playgroud)
指示.
这似乎是只有在这个子程序(有一组以相同的方式使用程序,但他们没有这个编译)在交易的变化调用这个程序是不可见的!
我不明白.
其他过程会查看在事务中所做的更改,但具有此pragma指令的人除外.能够单独提交是否会造成损失?
是否可以rowtype为表名创建一个作为参数传递给a的表名,Stored-Procedure以及如何知道在DBMS_OUUTPUT.PUT_LINE()语句中处理它们的列.
最终用户可以提供任何用户名(架构)和表名
我想做一些如下所示的事情,但它不起作用.
CREATE OR REPLACE PROCEDURE SP_PASS(USER_NAME VARCHAR2,TAB_NAME IN VARCHAR2)
AS
TYPE REF_CUR IS REF CURSOR;
V_ARR REF_CUR;
V_SQL VARCHAR(200);
V_ROWTYPE USER_NAME.TAB_NAME%ROWTYPE;
BEGIN
V_SQL := 'SELECT * FROM '||USER_NAME||'.'||TAB_NAME;
OPEN V_ARR FOR V_SQL;
LOOP
FETCH V_ARR INTO V_ROWTYPE;
EXIT WHEN V_ARR%NOT FOUND;
DBMS_OUTPUT.PUT_LINE(V_ROWTYPE.COL1||','||V_ROWTYPE.COL2||','||V_ROWTYPE.COL3);
END LOOP;
CLOSE V_ARR;
END;
Run Code Online (Sandbox Code Playgroud)
如果有可能请告诉我.
谢谢.
无论我尝试过什么,我都会在消息中得到PLS-00103错误:
Error starting at line 1 in command:
DECLARE
MyVar NUMBER(12,0);
BEGIN
HISTORY.sp_CHS_Insert('OMSC01', 522‚ 'OMSC01' ,522 , 4, 'S14_DCSKOLIZE', 'CHYBA', MyVar);
END;
Error report:
ORA-06550: ?ádka 4, sloupec 38:
PLS-00103: Encountered the symbol "," when expecting one of the following:
) , * & = - + < / > at v is mod remainder not rem =>
<exponent (**)> <> or != or ~= >= <= <> and or like like2
like4 likec between || multiset member submultiset
Symbol …Run Code Online (Sandbox Code Playgroud) 我是Oracle新手.我用这种语法创建了一个EVENT表:
CREATE TABLE Event
(event_id NUMBER (3) NOT NULL,
event_date DATE NOT NULL,
venue_id NUMBER (2) NOT NULL,
concert_id NUMBER (3) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
我想创建一个触发器,以确保音乐会在8月份无法运行.我尝试了以下代码来创建触发器.触发器已成功创建,但在插入8月份的日期后,已插入.这不是假设的.
CREATE OR REPLACE TRIGGER check_date
BEFORE INSERT ON event
DECLARE
event_date date;
BEGIN
IF (to_char(event_date, 'mm') = 8) THEN
raise_application_error(-20000, 'Concerts cannot be run during August');
END IF;
END;
Run Code Online (Sandbox Code Playgroud) 我正在尝试学习一些PL/SQL,但我的第一个程序遇到问题:
declare
v_string_tx varchar2(256):='Hello World!';
begin
dbms_output.put_line(v_string_tx);
end;
Run Code Online (Sandbox Code Playgroud)
当我在SQL Developer中运行它时,我只收到一条消息"匿名块已完成".但是我没有得到'Hello World!' 正如所料.谁知道我错过了什么?
我尝试在此代码之前放置'set serveroutput'行,但是当我这样做并运行它时,没有任何反应(我甚至没有收到消息告诉我匿名块已经完成).
为什么我得到这个错误,没有解析语句是什么意思.
ORA-01003: no statement parsed
Run Code Online (Sandbox Code Playgroud)
这是代码:
PROCEDURE ORIGINAL_TABLE.UPDATE_GROUPS IS
-- cursor loaded with the swam groups
CURSOR cursor1 IS
SELECT ID, NEW_DESCRIPTION
FROM NEW_TABLE.NEW_GROUP_TABLE@DB_LINK.X;
BEGIN
FOR C1_REC IN cursor1 LOOP
UPDATE
ORIGINAL_TABLE."GROUPS"
SET
GROUP_ID = C1_REC.ID
WHERE
ORIGINAL_TABLE."GROUPS".DESCRIPTION = C1_REC.NEW_DESCRIPTION;
IF (SQL%ROWCOUNT = 0) THEN
INSERT INTO
ORIGINAL_TABLE.GROUPS("GROUP_ID", "DESCRIPTION")
VALUES (C1_REC.ID, C1_REC.NEW_DESCRIPTION);
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(SQLERRM);
END;
Run Code Online (Sandbox Code Playgroud)
我尝试使用上面的代码尝试使用新表中的值更新旧表,如果新组不存在则插入它.
更新:已更改%ROWCOUNT> 0表示%ROWCOUNT = 0
如何在Oracle PL/SQL类型中定义无参数构造函数?我试过这个:
create or replace type FooBar as object
(
constructor function FooBar() return self as result
);
...
foo_bar := FooBar();
Run Code Online (Sandbox Code Playgroud)
但是类型声明中的空参数列表会引发PLS-00103.
当我遇到一些让我对NULL值感到惊讶的事情时,我正在调试oracle数据库中的一个过程.任何人都可以解释为什么以下查询返回false,这里的非等式检查?
DECLARE
vNullVariable VARCHAR2(2) := NULL;
vVariable VARCHAR2(2) := 'Hi';
BEGIN
IF vNullVariable <> vVariable THEN
dbms_output.put_line( 'The variables are not equal' );
ELSE
dbms_output.put_line( 'The variables are equal' );
END IF;
END;
Run Code Online (Sandbox Code Playgroud)