我目前收到此错误 ORA-06550 PLS-00103 遇到符号“VERSION”...
任何人都可以帮我解决这个问题吗?非常感激!
declare
sql_stmnt VARCHAR(200);
lsparameter varchar(50);
lsparameterdata varchar(20);
begin
sql_stmnt := 'SELECT parameter, parameter_data into lsparameter, lsparameterdata FROM MyTable WHERE parameter = 'version'';
EXECUTE IMMEDIATE sql_stmnt;
end;
Run Code Online (Sandbox Code Playgroud)
我知道我已经在 where 子句中将参数设置为“version”。我想从 MyTable 检索参数和parameter_data 以检查版本,然后继续执行函数的其余部分。
提前致谢。
我正在尝试从报告页面到表单页面检索客户 id pk 列,每当用户使用 oracle applicationexpress 从报告页面移动到表单页面时,该列就会自动递增。所以我正在尝试创建一个返回 a 的触发器具有最后一行的值以及 +1 增量的数字。但是我收到这个错误
Error at line 8: PLS-00103: Encountered the symbol "(" when expecting one of the following:
, from
6. INTO number
7. FROM (SELECT a.cust_id, max(cust_id) over() as max_pk FROM customer a)
8. WHERE cust_id = max_pk;
9. number:=(cust_id+1);
10. END;
Run Code Online (Sandbox Code Playgroud)
这是我的 PL/SQL 过程。
CREATE OR REPLACE FUNCTION cust_id_incremental(cust_id IN number)
RETURN number;
BEGIN
SELECT cust_id
INTO number
FROM (SELECT a.cust_id, max(cust_id) over() as max_pk FROM customer a)
WHERE cust_id …Run Code Online (Sandbox Code Playgroud) 我想读取文本文件,将其存储在变量中并在 pl/sql 中输出该变量。我正在使用以下代码,但出现错误:语句被忽略。
create or replace PROCEDURE blah
AS
DECLARE
f UTL_FILE.FILE_TYPE;
s VARCHAR2(200);
BEGIN
f := UTL_FILE.FOPEN('C:\Users\s420105\Music','blahh.txt','R');
UTL_FILE.GET_LINE(f,s);
UTL_FILE.FCLOSE(f);
dbms_output.put_line(s);
END;
Run Code Online (Sandbox Code Playgroud)
我不确定 UTL 权限,但我想如果是由于 UTL 权限,它会抛出不同的错误。这
这是我的功能:
FUNCTION GET(V_IN IN NUMBER) RETURN VARCHAR2 AS
V_OUT VARCHAR2(1000);
BEGIN
function body
END;
Run Code Online (Sandbox Code Playgroud)
当我右键单击该函数并单击测试时,我得到以下信息:
begin
-- Call the function
:result := pkg.get(V_IN => :V_IN);
end;
Run Code Online (Sandbox Code Playgroud)
如何替换该变量 V_IN 的值?我需要测试一个数字,比如 940。
当我尝试代码时:
declare
r varchar2(2000);
begin
-- Call the function
r := pkg.get(940);
end;
Run Code Online (Sandbox Code Playgroud)
我收到错误:
ORA-01036: illegal variable name/number
Run Code Online (Sandbox Code Playgroud)
您能建议调用此函数的各种方法吗?
PS:使用的工具:PL/SQL Developer Allround Automations。版本8.0.1.1502
Oracle 数据库 11g 企业版
如果我使用相同的 cod_regista 插入多于一行,它会创建重复项,我该如何消除它们?每个值我只需要一个记录
CREATE OR REPLACE TRIGGER piazzetta_trg
BEFORE INSERT OR UPDATE
ON regia_piazzetta
FOR EACH ROW
BEGIN
IF INSERTING THEN
FOR a IN(SELECT cod_regista, SUM(costo_produzione) as tot
FROM regia_piazzetta
GROUP BY cod_regista)
LOOP
INSERT INTO piazzetta_tot VALUES (a.cod_regista, a.tot);
END LOOP;
UPDATE piazzetta_tot SET costo_totale = costo_totale + :new.costo_produzione WHERE piazzetta_tot.id_regista = :new.cod_regista;
END IF;
IF UPDATING THEN
UPDATE piazzetta_tot SET costo_totale = costo_totale+(:new.costo_produzione - :old.costo_produzione) WHERE piazzetta_tot.id_regista = :new.cod_regista;
END IF;
END;
Run Code Online (Sandbox Code Playgroud) 我正在创建一个 Oracle 包,我想知道是否可以将 prcedure 设为私有,这是我的示例代码:
CREATE OR REPLACE PACKAGE MYSCHEMA.MyPackage AS
PROCEDURE MyProcedureA(outputParam OUT VARCHAR2);
PROCEDURE MyProcedureB(inputParam IN VARCHAR2);
END MyPackage;
/
CREATE OR REPLACE PACKAGE BODY MYSCHEMA.MyPackage AS
PROCEDURE MyProcedureA(outputParam OUT VARCHAR2) AS
myHello VARCHAR2(1000) := 'Hello';
BEGIN
MyProcedureB(myHello);
outputParam := 'OK';
END MyProcedureA;
PROCEDURE MyProcedureB(inputParam IN VARCHAR2) AS
myWorld VARCHAR2(1000) := 'World';
BEGIN
dbms_output.put_line(inputParam || myWorld);
END MyProcedureB;
END MyPackage;
Run Code Online (Sandbox Code Playgroud)
是否可以将 MyProcedureB 设为“私有”,我的意思是它只能由包 (MyProcedureA) 中的其他程序调用?
我正在尝试使用如下 SQL 设置比 end_ts 日期时间少一秒的日期时间
UPDATE Table1 SET
UPDTD_DT=(SELECT TO_DATE(END_TS-1/(24*60*60),'DD/MM/YYYY HH24:MI:SS')
FROM View1) WHERE id = '123';
Run Code Online (Sandbox Code Playgroud)
但运行此更新后,日期时间为 00:00:00。我显示并检查了 TO_DATE(END_TS-1/(24 60 60),'DD/MM/YYYY HH24:MI:SS') 看起来不错。
SELECT TO_DATE(END_TS-1/(24*60*60),'DD/MM/YYYY HH24:MI:SS') FROM View1 is 25/03/2022 10:14:44
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激。
我是一个sql领域的新人,我有一些问题.
如下表格
Table Name:EM
ID name Birth High
1 Tom 11/23 65
2 Mary 11/23 65
3 Bill 03/02 55
4 Liny 01/08 45
5 Kevin 05/16 50
6 Lee 05/16 50
Run Code Online (Sandbox Code Playgroud)
但我只需要下面的数据
ID name Birth High
1 Tom 11/23 65
2 Mary 11/23 65
3 Kevin 05/16 50
4 Lee 05/16 50
Run Code Online (Sandbox Code Playgroud)
我用傻瓜sql来获取这样的数据
select * from em where birth = '11/23' and high = '65';
select * from em where birth = '05/16' and high = '50';
Run Code Online (Sandbox Code Playgroud)
请教我如何在一个sql语句中得到结果,非常感谢.
我的选择有时间问题。DB 中的时间与系统时间不同,所以我想我需要使用SELECT SYSDATE FROM DUAL但它在另一个选择中不起作用。我使用 PL/SQL 开发人员。
SELECT t.something1,
ROUND((TRUNC(SELECT SYSDATE FROM DUAL) - 1 + 2),1) AS NAME
FROM customers t
WHERE t.something1 = ROUND((TRUNC(SELECT SYSDATE FROM DUAL) - 1 + 2),1);
Run Code Online (Sandbox Code Playgroud)
我也尝试声明新变量,但我总是收到错误消息。
DECLARE
day DATE
SELECT SYSDATE
INTO day
FROM DUAL
SELECT t.something1,
ROUND((TRUNC(day)- 1 + 2),1) AS NAME
FROM customers t
WHERE t.something1 = ROUND((TRUNC(day) - 1 + 2),1);
Run Code Online (Sandbox Code Playgroud) 我有一个像这样的数据迁移脚本.
Data_migration.sql
它的内容是
insert into table1 select * from old_schema.table1;
commit;
insert into table2 select * from old_schema.table2;
commit;
Run Code Online (Sandbox Code Playgroud)
并且在执行脚本时table1有pk_productname约束
SQL> @ "data_migration.sql"
Run Code Online (Sandbox Code Playgroud)
我将获得一个唯一的约束(pk_productname)违规.但是当我执行单独的sql语句时,我不会得到任何错误.这背后有任何原因.以及如何解决这个问题.
任何人都可以告诉我SQL中NOT EXIST和MINUS运算符之间的差异吗?我何时可以使用?哪一个可以提供更好的性能?
plsqldeveloper ×12
plsql ×10
oracle ×8
sql ×8
oracle10g ×2
oracle11g ×2
function ×1
primary-key ×1
select ×1