Скрытые функции в Oracle

Предупреждение: [fункция] ожидает, что параметр 1 будет ресурсом, boolean задан

(более общий вариант Предупреждение: mysql_fetch_array () ожидает, что параметр 1 будет resource, boolean given )

Ресурсы - это тип в PHP (например, строки, целые числа или объекты). Ресурс является непрозрачным блобом без собственной значимой ценности. Ресурс специфичен и определен определенным набором функций или расширений PHP. Например, расширение Mysql определяет два типа ресурсов :

В модуле MySQL есть два типа ресурсов. Первый - идентификатор ссылки для подключения к базе данных, второй - ресурс, который содержит результат запроса.

Расширение cURL определяет другой два типа ресурсов :

... дескриптор cURL и мультирум cURL.

Когда var_dump ed значения выглядят так:

$resource = curl_init();
var_dump($resource);

resource(1) of type (curl)

Это все большинство ресурсов - это числовой идентификатор ((1)) определенного типа ((curl)).

Вы переносите эти ресурсы и передаете их различным функциям, для которых такой ресурс что-то значит. Обычно эти функции выделяют определенные данные в фоновом режиме, а ресурс - это просто ссылка, которую они используют для отслеживания этих данных внутри.


«... ожидает, что параметр 1 будет ресурсом, логическим данная "ошибка, как правило, является результатом непроверенной операции, которая должна была создать ресурс, но вместо этого вернула false. Например, функция fopen имеет это описание:

Возвращаемые значения

Возвращает ресурс указателя файла при успешном выполнении или FALSE

Таким образом, в этом коде $fp будет либо resource(x) of type (stream), либо false:

$fp = fopen(...);

Если вы не операция fopen будет успешной или неудачной и, следовательно, будет ли $fp действительным ресурсом или false и передать $fp другой функции, которая ожидает ресурс, вы можете получить вышеуказанную ошибку:

$fp   = fopen(...);
$data = fread($fp, 1024);

Warning: fread() expects parameter 1 to be resource, boolean given

Вам всегда нужно проверять возвращаемое значение функций, которые пытаются выделить ресурс , и может выйти из строя :

$fp = fopen(...);

if (!$fp) {
    trigger_error('Failed to allocate resource');
    exit;
}

$data = fread($fp, 1024);

Связанные ошибки:

24
задан 4 revs, 3 users 62% 23 May 2017 в 10:32
поделиться

19 ответов

Так как Вершина является теперь частью каждой базы данных Oracle, эти функции утилиты Apex полезны, даже если Вы не используете Вершину:

SQL> declare
  2    v_array apex_application_global.vc_arr2;
  3    v_string varchar2(2000);
  4  begin
  5  
  6    -- Convert delimited string to array
  7    v_array := apex_util.string_to_table('alpha,beta,gamma,delta', ',');
  8    for i in 1..v_array.count
  9    loop
 10      dbms_output.put_line(v_array(i));
 11    end loop;
 12  
 13    -- Convert array to delimited string
 14    v_string := apex_util.table_to_string(v_array,'|');
 15    dbms_output.put_line(v_string);
 16  end;
 17  /
alpha
beta
gamma
delta
alpha|beta|gamma|delta

PL/SQL procedure successfully completed.
15
ответ дан Tony Andrews 28 November 2019 в 22:10
поделиться

Q: Как назвать снабженный курсором от ЖАБЫ?

А: Пример, изменение в Вашем курсоре, packagename и сохраненном имени proc

declare cursor PCK_UTILS.typ_cursor;  

begin   
    PCK_UTILS.spc_get_encodedstring(  
        'U',  
        10000002,  
        null,  
        'none',  
        cursor);  
end;
1
ответ дан Peter Gfader 28 November 2019 в 22:10
поделиться

@Peter

можно на самом деле связать переменную типа "Курсор" у ЖАБЫ, затем использовать его в операторе, и это отобразит результаты в сетке результата.

exec open :cur for select * from dual;
2
ответ дан 2 revs 28 November 2019 в 22:10
поделиться

таблицы Snapshot . Также найденный в Облегченной Oracle, и чрезвычайно полезной для прокрутки Вашего собственного механизма репликации.

2
ответ дан MusiGenesis 28 November 2019 в 22:10
поделиться

Больше недокументированного материала в http://awads.net/wp/tag/undocumented/

Предупреждение: Используйте на Ваш собственный риск.

3
ответ дан Eddie Awad 28 November 2019 в 22:10
поделиться

Если Вы получаете значение PASSWORD столбец на DBA_USERS, можно копировать/восстанавливать пароли, не зная их:

 ALTER USER xxx IDENTIFIED BY VALUES 'xxxx';
4
ответ дан FerranB 28 November 2019 в 22:10
поделиться

Я просто узнал о псевдостолбце Ora_rowSCN. Если Вы не накрываете на свой стол для этого, этот pcolumn дает Вам блок SCN. Это могло быть действительно полезно для чрезвычайной ситуации, "О, гадьте, я не имею никакого аудита на этой таблице и задаюсь вопросом, изменил ли кто-то данные с тех пор вчера".

, Но еще лучше то, если Вы составляете таблицу с Rowdependecies НА. Это помещает SCN последнего изменения на каждой строке. Это поможет Вам избежать "Потерянного Редактирования" проблема, не имея необходимость включать каждый столбец в Ваш запрос.

IOW приложение при захвате строки для пользовательской модификации также выбирают Ora_rowscn. Тогда, когда Вы отправляете редактирования пользователя, включаете Ora_rowscn = v_rscn в дополнение к уникальному ключу в где пункт. Если кто-то коснулся строки, так как Вы захватили ее, иначе потерял редактирование, обновление будет соответствовать нулевым строкам, так как ora_rowscn изменится.

Настолько прохладный.

5
ответ дан Mark Brady 28 November 2019 в 22:10
поделиться

Предикат ПЕРЕКРЫТИЙ не документирован.

http://oraclesponge.wordpress.com/2008/06/12/the-overlaps-predicate/

6
ответ дан David Aldridge 28 November 2019 в 22:10
поделиться

Частое восстановление индексов является почти всегда пустой тратой времени.

7
ответ дан David Aldridge 28 November 2019 в 22:10
поделиться

Можно просмотреть данные таблицы по состоянию на предыдущий раз с помощью Запроса Ретроспективного кадра с определенными ограничениями.

Select *
  from my_table as of timestamp(timestamp '2008-12-01 15:21:13')

11 г имеет совершенно новый набор функций вокруг сохранения исторических изменений более надежно.

8
ответ дан David Aldridge 28 November 2019 в 22:10
поделиться

Процент совпадений Кэш-буфера фактически бессмыслен как предиктор системной эффективности

8
ответ дан David Aldridge 28 November 2019 в 22:10
поделиться

Подсказка кардинальности главным образом не документирована.

 explain plan for
 select /*+ cardinality(@inner 5000) */ *
 from   (select /*+ qb_name(inner) */ * from dual)
 /
 select * from table(dbms_xplan.display)
 /
 --------------------------------------------------------------------------
 | Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
 --------------------------------------------------------------------------
 |   0 | SELECT STATEMENT  |      |  5000 | 10000 |     2   (0)| 00:00:01 |
 |   1 |  TABLE ACCESS FULL| DUAL |     1 |     2 |     2   (0)| 00:00:01 |
 --------------------------------------------------------------------------
9
ответ дан David Aldridge 28 November 2019 в 22:10
поделиться

"Полные сканирования таблицы не всегда плохо. Индексы не всегда хороши".

основанный на индексе метод доступа менее эффективен при чтении строк, чем полное сканирование, когда Вы имеете размеры, это с точки зрения строк получило доступ на единицу работы (обычно на логическое чтение). Однако много инструментов интерпретируют полное сканирование таблицы как знак неэффективности.

Берут пример, где Вы читаете несколько сотен счетов frmo таблица счета и ищете способ оплаты в маленькой таблице поиска. Используя индекс для зондирования таблицы поиска для каждого счета, вероятно, означает три или четыре логических io's на счет. Однако полное сканирование таблицы поиска при подготовке к хэшированию от данных счета, вероятно, потребовало бы только нескольких логических чтений, и само хэширование будет cmoplete в памяти почти ни по какой стоимости вообще.

Однако много инструментов посмотрели бы на это и видели бы "полное сканирование таблицы" и сказали бы Вам пытаться использовать индекс. Если Вы делаете таким образом, Вы, возможно, просто расстроили свой код.

Случайно по уверенности в индексах, как в вышеупомянутом примере, заставляет "Процент совпадений Кэш-буфера" повышаться. Поэтому BCHR является главным образом ерундой как предиктором системной эффективности.

12
ответ дан 2 revs 28 November 2019 в 22:10
поделиться

Обойдите кэш-буфер и читайте прямо из диска с помощью чтений прямого пути.

alter session set "_serial_direct_read"=true;

Причины табличная область (9i) или быстро возражают (10 г +) контрольной точке, настолько осторожной в занятых системах OLTP.

3
ответ дан David Aldridge 28 November 2019 в 22:10
поделиться

Я не знаю, считается ли это скрытым, но Я был очень счастлив, когда увидел этот способ быстро увидеть, что происходит с настраиваемым оператором SQL.

SELECT /*+ GATHER_PLAN_STATISTICS */ * FROM DUAL;

SELECT * FROM TABLE(dbms_xplan.display_cursor( NULL, NULL, 'RUNSTATS_LAST'))
;

PLAN_TABLE_OUTPUT
-----------------------------------------------------
SQL_ID  5z36y0tq909a8, child number 0
-------------------------------------
SELECT /*+ GATHER_PLAN_STATISTICS */ * FROM DUAL

Plan hash value: 272002086

---------------------------------------------------------------------------------------------
| Id  | Operation         | Name | Starts | E-Rows | A-Rows |   A-Time   | Buffers | Reads  |
---------------------------------------------------------------------------------------------
|   1 |  TABLE ACCESS FULL| DUAL |      1 |      1 |      1 |00:00:00.02 |       3 |      2 |
---------------------------------------------------------------------------------------------


12 rows selected.

Где:

  • E-Rows - это оценочные строки.
  • A-Rows - это фактические строки.
  • A-Time - это фактическое время.
  • Буферы - это фактические буферы.

Если предполагаемый план отличается от фактического выполнения на несколько порядков, вы знаете, что у вас есть проблемы.

3
ответ дан 28 November 2019 в 22:10
поделиться

Не скрытая функция, а точный контроль доступа (FGAC) , также известный как безопасность на уровне строк, я использовал в прошлом и был впечатлен эффективностью его реализации. Если вы ищете что-то, что гарантирует, что вы можете контролировать степень детализации того, как строки отображаются для пользователей с различными разрешениями - независимо от приложения, которое используется для просмотра данных (SQL * Plus, а также ваше веб-приложение) - тогда это жемчужина .

Встроенная полнотекстовая индексация более широко документирована, но все же выделяется своей стабильностью (просто попробуйте запустить полную переиндексацию столбцов с полнотекстовой индексацией на аналогичных образцах данных в MS-SQL и Oracle, и вы увидеть разницу в скорости).

3
ответ дан 28 November 2019 в 22:10
поделиться
3
ответ дан 28 November 2019 в 22:10
поделиться

пункт модели (доступно для Oracle 10g и выше)

.
1
ответ дан 28 November 2019 в 22:10
поделиться

wm_concat работает как MySql group_concat, но недокументирован.

с данными:

-car-   -maker-
Corvette Chevy
Taurus   Ford
Impala   Chevy
Aveo     Chevy

select wm_concat(car) Cars, maker from cars
group by maker

дает вам:

-Cars-                   -maker-
Corvette, Impala, Aveo   Chevy
Taurus                   Ford
7
ответ дан 28 November 2019 в 22:10
поделиться
Другие вопросы по тегам:

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