我搜索了这个错误,但是由于它非常模糊,我找不到类似的东西来理解问题在哪里。此代码实际上是针对Oracle Apex应用程序的。我实际上有绑定变量而不是数字1和84(我确认它们在我的表中是正确的值),但仍然有相同的错误。
在声明变量之后,它选择一个字符串作为另一个表中一列的名称,并将其放入V_列。
然后我动态地构建一个查询来获取这个列的值,并将其放入v_值中,最后返回一个值(然后在表单文本字段中显示)。不幸的是,它返回ORA00905。
当我尝试使用已知值单独运行SQL命令时,它会运行。所以我认为动态SQL中一定有语法问题。谢谢你的帮助。
DECLARE
V_COLUMN VARCHAR2(50) := 'UNKNOWN';
V_VALUE VARCHAR2(50) := 0;
V_SQL VARCHAR2(500);
BEGIN
SELECT SUB_CAT_ABBREV INTO V_COLUMN FROM SUB_CATEGORY WHERE SUB_CATEGORY_ID = 1;
V_SQL := 'SELECT ' || V_COLUMN || ' INTO V_VALUE FROM PLANNED_EFFORTS WHERE PLAN_ID = 84';
EXECUTE IMMEDIATE V_SQL;
RETURN V_VALUE;
EXCEPTION
WHEN no_data_found THEN
RETURN 'No Data Found Error';
WHEN too_many_rows then
RETURN 'Too many rows';
WHEN OTHERS THEN
RETURN 'Other Error';
我搜索了这个错误,但是由于它非常模糊,我找不到类似的东西来理解问题在哪里。此代码实际上是针对Oracle Apex应用程序的。我实际上有绑定变量而不是数字1和84(我确认它们在我的表中是正确的值),但仍然有相同的错误。在声明变量之后,它选择一个字符串作为另一个表中一列的名称,并将其放入V_列。然后我动态地构建一个查询来获取这个列的值,并将其放入v_值中,最后返回一个值(然后在表单文本字段中显示)。...
ORA
-12154:TNS:无法解析指定的连接标识符
ORA
-12154:TNS:无监听程序
错误分析一、
PL
/
SQL
客户端登录到数据库,如果配置错误会有以上错误,如下图。
这个错误主要是
pl
/
sql
客户端的tnsnames.
ora
配置错误,或者是输入 database选项错误。
错误分析二、未配置环境变量
所以解决问题之前一定要配置环境变量TNS_ADMIN
path添加;E:\
PL
SQL
Developer(64)\instantclient_11_2
配置环境变量就是为了让
PL
/
SQL
Developer打开时加载到tnsnames.
ora
文件的内容
配置
pl
/
sql
的Datab
在用
PL
/
SQL
Developer等客户端工具连接
oracle
服务器时出现
ORA
-12541:TNS:无监听程序的错误,如下图:
发现原来是
oracle
的监听没有启动,重启监听后就连接成功了,下面跟大家分享一下如何启动
oracle
的监听。
1.在安装
Oracle
服务器的主机上,打开Net Configuration Assistant
2.选择监听程序配置,下一步
3.选择重新配置,下一步
4.选择监听程序,默认,下一步
注:如果你的监听已启动,则出现提示框,选择是
5.选择协议,使用默认的TCP协议,下一步
6.选择端口号,使用标准端口号1521,下一步
向表格中插入记录(insert into)时候,报异常,提示:
ORA
-00928:
缺失
SELECT
关键字
(missing SELECT keyword)
1、如网上大部分出现的类似,是因为列名上不能添加单引号:
如写成INSERT INTO USERTAB (‘uniPositionCode’,‘transferGroupName’,‘appCode’,‘appName’,‘tran...
select
nvl(sum(nvl(t.xxxxxxx,0) * nvl(t.xxxxxxx,1) * nvl(tpdc.xxxxxxx,0)),0)
into sp_sum_fee
from intf_policy t
left join (select * from xxxxxxx
where (EXISTS(select * from xxxxxxxwhere xxxxxxx='0104') and xxxxxxx='0104')
你的语句写错了,select maxlogid into oldmaxlogid from maxidtab;
str1:='select max(logid) into newmaxlogid from '||username||'.loginfo';
--改成str1:='select max(logid) from'||username||'.loginfo';
execute imm
CREATE OR RE
PL
ACE PROCEDURE top_movies IS BEGIN FOR movie_rec IN (SELECT movie_title, movie_avg_rating FROM movie ORDER BY movie_avg_rating DESC FETCH FIRST 5 ROWS ONLY) LOOP DBMS_OUTPUT.PUT_LINE(movie_rec.movie_title || ' - ' || movie_rec.movie_avg_rating); END LOOP; END; Error at line 7:
PL
/
SQL
:
ORA
-00933:
SQL
command not properly ended
该错误是因为
SQL
查询没有正确结束。您需要在 SELECT 语句的末尾添加分号来正确结束语句。请尝试以下代码:
CREATE OR RE
PL
ACE PROCEDURE top_movies
BEGIN
FOR movie_rec IN (
SELECT movie_title, movie_avg_rating
FROM movie
ORDER BY movie_avg_rating DESC
FETCH FIRST 5 ROWS ONLY
DBMS_OUTPUT.PUT_LINE(movie_rec.movie_title || ' - ' || movie_rec.movie_avg_rating);
END LOOP;
请注意,FETCH FIRST 5 ROWS ONLY 是
Oracle
12c 及更高版本的语法。如果您使用的是旧版本的
Oracle
,则可以使用类似于以下查询的语法:
SELECT *
FROM (
SELECT movie_title, movie_avg_rating
FROM movie
ORDER BY movie_avg_rating DESC
WHERE ROWNUM <= 5;