我编写了以下pl/sql程序,无法检测错误:
declare
variable a number;
b number:=2354;
begin
b:=:a;
end;
Run Code Online (Sandbox Code Playgroud)
这个错误是
SP2-0552:未声明绑定变量"A".
请帮忙......
org.apache.jasper.JasperException: An exception occurred processing JSP page /customerDelete.jsp at line 39
java.lang.NullPointerException
sun.jdbc.odbc.JdbcOdbcPreparedStatement.clearParameter(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
我在尝试
//get parameters from the request
String firstName=request.getParameter("first_Name");
String lastName=request.getParameter("last_Name");
preparedStatement = conn.prepareStatement("DELETE FROM customer "
+ " WHERE customer.first_Name= " +firstName
+ " AND customer.last_Name= " +lastName);
preparedStatement.setString(1, firstName); // line 39
preparedStatement.setString(2, lastName);
preparedStatement.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
SQL表
CREATE TABLE customer
(cust_ID NUMBER NOT NULL,
sale_ID NUMBER NOT NULL,
first_Name VARCHAR2(30) NOT NULL,
mI VARCHAR2(2) ,
last_Name VARCHAR2(50) NOT NULL,
street_Name VARCHAR2(50) ,
city VARCHAR2(30) NOT NULL, …Run Code Online (Sandbox Code Playgroud) 我想要雇员的姓名,工作,在'20-FEB-81'和'01 -MAY-81'之间雇用,并按升序排列
查询我跑错了
SQL> select ename, job, hiredate where hiredate between '20-FEB-81' AND '01-MAY-81' from emp;
select ename, job, hiredate where hiredate between '20-FEB-81' AND '01-MAY-81' from emp
*
ERROR at line 1:
ORA-00923: FROM keyword not found where expected
SQL>
Run Code Online (Sandbox Code Playgroud)
我的表SQL>从emp中选择empno,ename,job,hiredate,sal;
EMPNO ENAME JOB HIREDATE SAL
---------- ---------- --------- --------- ----------
7839 KING PRESIDENT 17-NOV-81 5000
7698 BLAKE MANAGER 01-MAY-81 2850
7782 CLARK MANAGER 09-JUN-81 2450
7566 JONES MANAGER 02-APR-81 2975
7654 MARTIN SALESMAN 28-SEP-81 1250
7499 ALLEN SALESMAN …Run Code Online (Sandbox Code Playgroud) 首先,这是一个作业,所以你想要建议的大多数非常酷的预先编写的函数,我将不被允许使用.
我有几张桌子都有字段
creation_date
created_by
last_update_date
last_updated_by
Run Code Online (Sandbox Code Playgroud)
我需要编写一个触发器来填充这些内容以进行创建或更新.问题是,这些表的空值对我来说是个问题.例:
CREATE TABLE parts
(
pno NUMBER,
pname VARCHAR2(50) NOT NULL,
qoh NUMBER NOT NULL,
price NUMBER(5,2),
reorder_level NUMBER(2),
creation_date DATE NOT NULL,
created_by VARCHAR2(10) NOT NULL,
last_update_date DATE NOT NULL,
last_updated_by VARCHAR2(10) NOT NULL,
CONSTRAINT parts_PK PRIMARY KEY (pno))
Run Code Online (Sandbox Code Playgroud)
这些NOT NULL是给我的,我不允许改变它们.所以我很难将其概念化.
我在想我的触发器看起来像
CREATE OR REPLACE TRIGGER pcreate
BEFORE UPDATE on parts
FOR EACH ROW
BEGIN
UPDATE
SET creation_date = SYSDATE;
SET created_by = USER;
SET last_update_date = SYSDATE;
SET last_updated_by …Run Code Online (Sandbox Code Playgroud) 我正在使用oracle 11g ex edition.从教科书中我找到了格式选项,但它不起作用.表格结构如下.
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NUMBER(4)
NAME NOT NULL VARCHAR2(5)
ADDRESS VARCHAR2(20)
PINCODE NUMBER(6)
LOCATION NUMBER(2)
DOB DATE
Run Code Online (Sandbox Code Playgroud)
我用过这个命令
column name format A12
select name "USERNAME" from hai;
Run Code Online (Sandbox Code Playgroud)
我希望将列标题显示为USERNAME.但它只显示USERN.当使用格式选项时,它需要显示12个字符,但它只显示表格定义中的5个字符.为什么?查询结果如下
USERN
-----
korna
Run Code Online (Sandbox Code Playgroud) 创建PLSQL过程,该过程将客户ID作为参数并显示
他/她的预订.每个预订展示厅否,酒店,开始日期和持续时间
create or replace procedure emp_project(CustID NUMBER)
is
cursor ecur
is
select r.RoomNo, r.HotelName, StartDate, Duration
from Room r, Booking b
where r.RoomNo=b.RoomNo
and r.RoomNo = b.CustID;
begin
for erec in ecur loop
dbms_output.put_line(erec. RoomNo ||' '||erec. HotelName ||' '|| erec. Duration);
end loop;
end;
/
Run Code Online (Sandbox Code Playgroud)
有人可以解释我的参数有什么问题吗?我运行时遇到此错误:
SQL> exec emp_project
BEGIN emp_project; END;
*ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to 'EMP_PROJECT'
ORA-06550: line 1, column 7:
PL/SQL: …Run Code Online (Sandbox Code Playgroud) 我对表的insert语句出错.属性E_STIME AMD E_FTIME是事件的开始日期,开始时间和结束日期,结束时间.两者的数据类型都是TIMESTAMP (6).
我试图将数据插入到已在sracle plus中创建的表上,但是我得到了一个错误
ORA-01830:日期格式图片在转换整个输入字符串之前结束
INSERT INTO EVENT (E_ID, E_NAME, E_STIME, E_FTIME, E_COST, ET_ET_ID, V_V_ID, C_C_ID)
VALUES ('E000002', 'RAVISINGH PARTY', TO_TIMESTAMP('2017-01-11 13:00:00.00',
'YYYY-MM-DD HH24:MI:SS'), TO_TIMESTAMP('2017-01-11 18:00:00.00',
'YYYY-MM-DD HH24:MI:SS'),'4897.00','ET002','V0002','C0002');
Run Code Online (Sandbox Code Playgroud)
它最初给出了一个错误 -
ORA-01843:不是有效月份
在TO_TIMESTAMP插入后添加了我的位ORA-01830.
我究竟做错了什么?
我想捕获任何可能发生的SQL错误,所以我在ksh中写了这个:
$ORACLE_HOME/bin/sqlplus -s u/p <<EOF
WHENEVER OSERROR EXIT 68;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
CREATE TABLE new_table
AS (SELECT * FROM wrong_old_table);
COMMIT;
EOF
Run Code Online (Sandbox Code Playgroud)
我为旧表输入了错误的名称以查看会发生什么。我希望只有在WHENEVER SQLERROR中询问时才具有sqlcode,但是我有这个:
AS (SELECT * FROM wrong_old_table)
*
ERROR at line 2:
ORA-00942: table or view does not exist
Run Code Online (Sandbox Code Playgroud)
我更改了代码:
$ORACLE_HOME/bin/sqlplus -s u/p <<EOF
WHENEVER OSERROR EXIT 68;
WHENEVER SQLERROR EXIT SQL.SQLCODE;
BEGIN
CREATE TABLE new_table
AS (SELECT * FROM wrong_old_table);
COMMIT;
END;
EOF
sql_code=$?
echo "code=$sql_code"
Run Code Online (Sandbox Code Playgroud)
即使有错误,代码也等于0。sql错误代码在哪里?
实际上,不使用begin ... end就可以了
我在SQL Developer中具有以下脚本,但是在SQL Plus命令行中运行它似乎返回无效的日期。
set serveroutput on;
DECLARE
yesterday varchar2(30);
tz_yesterday varchar2(30);
BEGIN
select sysdate - 1 into yesterday from dual;
select cast(yesterday as timestamp WITH LOCAL TIME ZONE) into tz_yesterday from dual;
dbms_output.put_line(yesterday);
dbms_output.put_line(tz_yesterday);
END;
Run Code Online (Sandbox Code Playgroud)
这是SQL Developer提供的输出,它是正确的:
10-OCT-18
10-OCT-18 12.00.00.000000 AM
Run Code Online (Sandbox Code Playgroud)
这就是我在SQL Plus中得到的
SQL> l
1 DECLARE
2 g_vendor_id NUMBER;
3 g_product_id NUMBER;
4 yesterday varchar2(30);
5 tz_yesterday varchar2(30);
6 g_user_id NUMBER;
7 BEGIN
8 select sysdate - 1 into yesterday from dual;
9 select cast(yesterday as timestamp WITH LOCAL …Run Code Online (Sandbox Code Playgroud) 我试图使用SQLPLUS从我的plsql块执行该过程,遗憾的是,我无法在执行SQL脚本之后看到来自过程的"dbms_output.put_line"的输出,尽管输出在假脱机文件中可见,我想在执行完成后在屏幕上显示输出.
现在,虽然当我执行"SET SERVEROUTPUT ON"时,我得到提示但没有输出 在SQL开发人员中它显示输出,一旦执行完成,我该怎么做才能看到sqlplus中的输出.
在SQLPLUS中输出
SQL Developer中的输出
表结构和数据
create table cust_temp_temp
(name varchar2(20) , id varchar2(20));
insert into cust_temp_temp
select 'hasu t', '100' from dual
union all
select 'hasu r', '100' from dual
union all
select 'hasu e', '100' from dual
union all
select 'hasu w', '100' from dual
union all
select 'hasu q', '100' from dual;
Run Code Online (Sandbox Code Playgroud)
包装结构:
CREATE OR REPLACE PACKAGE CUSTOM_PKG
AS
PROCEDURE get_transaction_details(
id_ cust_temp_temp.id%TYPE);
END CUSTOM_PKG;
/
Run Code Online (Sandbox Code Playgroud)
包装体:
CREATE OR REPLACE PACKAGE BODY CUSTOM_PKG
AS …Run Code Online (Sandbox Code Playgroud)