Обновите результаты оператора SELECT

Я обнаружил проблему, вызвавшую ошибку HTTP.

В функции setFalse(), которая вызывается кнопкой Сохранить, мой код пытался отправить форму, содержащую кнопку.

        function setFalse(){
            document.getElementById("hasId").value ="false";
            document.deliveryForm.submit();
            document.submitForm.submit();

, когда я удаляю document.submitForm.submit();, это работает:

        function setFalse(){
            document.getElementById("hasId").value ="false";
            document.deliveryForm.submit()

@Roger Lindsjö Спасибо, что обнаружили мою ошибку, в которой я не указывал правильный параметр!

6
задан Juan Mellado 1 May 2012 в 14:11
поделиться

3 ответа

Я не видел для этого официального названия. В Oracle SQL Reference говорится только об обновлении подзапроса. Я склонен думать об этом как о форме «обновления представления», когда подзапрос находится во встроенном представлении.

Да, это работает, когда несколько таблиц объединяются, но при условии соблюдения правил обновления представления. Это означает, что только одна из базовых таблиц представления может быть обновлена, и эта таблица должна быть «сохранена ключом» в представлении: т.е. ее строки должны иметь возможность появляться в представлении только один раз. Для этого необходимо, чтобы на любые другие таблицы в представлении (подзапросе) ссылались через ограничения внешнего ключа в таблице, которая должна быть обновлена.

Некоторые примеры могут помочь. Используя стандартные таблицы Oracle EMP и DEPT, при этом EMP.EMPNO определяется как первичный ключ EMP, а EMP.DEPTNO определяется как внешний ключ для DEPT.DEPTNO,

5
ответ дан 17 December 2019 в 00:13
поделиться

Упомянутая вами форма не имеет конкретного названия AFAIK. Простое обновление результата оператора выбора.

Существует еще одна форма, называемая Коррелированное обновление (с обновлением одного или нескольких столбцов)

UPDATE TABLE(<SELECT STATEMENT>) <alias>
SET <column_name> = (
  SELECT <column_name>
  FROM <table_name> <alias>
  WHERE <alias.table_name> <condition> <alias.table_name>
);

Форма с несколькими столбцами

...
SET (<column_name_list>) = (
  SELECT <column_name_list>
...

Существует также форма, из которой также возвращается значения, называемые Обновление с возвращающим предложением

И некоторые особенности для обновлений с вложенными таблицами. Лучше всего проверить хотя бы эти две страницы

Справочник по языку SQL для баз данных Oracle SELECT

ОБНОВЛЕНИЕ Справочника по языку SQL для баз данных Oracle

1
ответ дан 17 December 2019 в 00:13
поделиться

Спасибо за комментарии, я думал, что это стандартный Sql ...: (

Для Oracle вы можете написать обновление в таблице, где вы получите информацию с помощью соединения, например:

UPDATE (
    SELECT * 
    FROM table1 t1 
    LEFT JOIN table2 t2 ON t2.t1id = t1.ID
) SET t1.col1 = t2.col2

Для Sql Server это:

UPDATE t1
SET col1 = t2.col2
FROM table1 t1
LEFT JOIN table2 t2 on t2.t1id = t1.id

Если кто-нибудь знает способ сделать это, который работает на Oracle, Sql Server и MySql, мне было бы интересно.

1
ответ дан 17 December 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: