【问题标题】:oracle 11g application express interface virtual column that calculates total amount of salesoracle 11g application express接口虚拟列计算总销售额
【发布时间】:2020-10-16 06:04:38
【问题描述】:

我目前正在通过在 oracle 11g application express 中编辑表单的某个页面项来处理我的界面项目。我很困惑,其中一列是从表中的另一列派生的,当我尝试通过接口注册新数据时无法正常工作。该列无法计算派生数据,就像它在 oracle sql 开发人员中的工作方式一样。我将列设置如下:

我一无所知,我应该将该列显示为隐藏,还是与需要 PL/SQL 表达式来计算数量值的源设置有关,以及自动计算 total_amount 值的 cost_perunit 列。我在网上搜索了解决方案,但找不到解决方案和相关问题。

此命令以文本 .txt 格式上传到应用程序 express

CREATE TABLE PAYMENT(
PAY_ID NUMBER(25)NOT NULL,
PAY_DATE DATE,
PAY_METHOD VARCHAR2(50 char),
SPARE_TYPE VARCHAR2(50 char),
QUANTITY NUMBER(12),
COST_PERUNIT NUMBER(6,2),
TOTAL_AMOUNT as (quantity*cost_perunit),
CONSTRAINT PAY_PK PRIMARY KEY(PAY_ID)
);

CREATE SEQUENCE pay_id_seq START WITH 400;

我将 TOTAL_AMOUNT 称为 (quantity*cost_perunit) 列,当我尝试通过表单创建新数据时返回错误。我应该在页面编辑设置中更改什么,以便它可以正常工作。

【问题讨论】:

  • 我认为也许您还应该用 oracle-apex 标记您的问题(我认为这与“oracle 11g application express”有关)

标签: oracle11g oracle-sqldeveloper oracle-xe


【解决方案1】:

你有两个选择创建一个没有虚拟列的表在运行时计算总量

例如select a.*,(quantity*cost_perunit) total_amount from payment a;

或创建带有关键字virtual的虚拟列的表

CREATE TABLE PAYMENT(
PAY_ID NUMBER(25)NOT NULL,
PAY_DATE DATE,
PAY_METHOD VARCHAR2(50 char),
SPARE_TYPE VARCHAR2(50 char),
QUANTITY NUMBER(12),
COST_PERUNIT NUMBER(6,2),
TOTAL_AMOUNT as (quantity*cost_perunit) VIRTUAL, 
CONSTRAINT PAY_PK PRIMARY KEY(PAY_ID));

@ddl payment

    DBMS_METADATA.GET_DDL(OBJECT_TYPE,OBJECT_NAME,OWNER)
    ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    
          CREATE TABLE "SCOTT"."PAYMENT"
           (    "PAY_ID" NUMBER(25,0) NOT NULL ENABLE,
                "PAY_DATE" DATE,
                "PAY_METHOD" VARCHAR2(50 CHAR),
                "SPARE_TYPE" VARCHAR2(50 CHAR),
                "QUANTITY" NUMBER(12,0),
                "COST_PERUNIT" NUMBER(6,2),
                "TOTAL_AMOUNT" NUMBER GENERATED ALWAYS AS ("QUANTITY"*"COST_PERUNIT") VIRTUAL ,
                 CONSTRAINT "PAY_PK" PRIMARY KEY ("PAY_ID")
          USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
          TABLESPACE "EXAMPLE"  ENABLE
           ) SEGMENT CREATION DEFERRED
          PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255
         NOCOMPRESS LOGGING
          TABLESPACE "EXAMPLE" ;

SQL> insert into payment (pay_id,pay_date,pay_method,spare_type,quantity,cost_perunit)
  2  values
  3  (&pid,&pdt,&pmethod,&spare,&qty,&cpu);
Enter value for pid: 101
Enter value for pdt: sysdate
Enter value for pmethod: 'CASH'
Enter value for spare: 'CREDIT CARD'
Enter value for qty: 12
Enter value for cpu: 1.9

1 row created.

Elapsed: 00:00:00.10
SQL> /
Enter value for pid: 102
Enter value for pdt: sysdate-1
Enter value for pmethod: 'DEBIT CARD'
Enter value for spare: 'CREDIT CARD'
Enter value for qty: 21
Enter value for cpu: 2.99

1 row created.

Elapsed: 00:00:00.00
SQL> commit;

Commit complete.


SQL> select * from payment;

    PAY_ID PAY_DATE            PAY_METHOD                                         SPARE_TYPE                                           QUANTITY COST_PERUNIT TOTAL_AMOUNT
---------- ------------------- -------------------------------------------------- -------------------------------------------------- ---------- ------------ ------------
       101 2020-06-25 14:06:46 CASH                                               CREDIT CARD                                                12          1.9         22.8
       102 2020-06-24 14:07:29 DEBIT CARD                                         CREDIT CARD                                                21         2.99        62.79


SQL>

编辑:我不知道顶点,但如果您决定创建没有虚拟列的表格,您可以添加标签框或不可编辑的文本框项目并使用公式显示顶点表单运行时间的计算

【讨论】:

  • 谢谢你,山姆,我会尝试这些解决方案,如果我能解决,我会在稍后通知
猜你喜欢
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多